xref: /aosp_15_r20/external/llvm/test/CodeGen/ARM/2012-08-27-CopyPhysRegCrash.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mcpu=cortex-a8 -march=thumb
2*9880d681SAndroid Build Coastguard Worker; Test that this doesn't crash.
3*9880d681SAndroid Build Coastguard Worker; <rdar://problem/12183003>
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32-S32"
6*9880d681SAndroid Build Coastguard Workertarget triple = "thumbv7-apple-ios5.1.0"
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Workerdeclare { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.arm.neon.vld3.v16i8.p0i8(i8*, i32) nounwind readonly
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.arm.neon.vst1.p0i8.v16i8(i8*, <16 x i8>, i32) nounwind
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Workerdefine void @findEdges(i8*) nounwind ssp {
13*9880d681SAndroid Build Coastguard Worker  %2 = icmp sgt i32 undef, 0
14*9880d681SAndroid Build Coastguard Worker  br i1 %2, label %5, label %3
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Worker; <label>:3                                       ; preds = %5, %1
17*9880d681SAndroid Build Coastguard Worker  %4 = phi i8* [ %0, %1 ], [ %19, %5 ]
18*9880d681SAndroid Build Coastguard Worker  ret void
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Worker; <label>:5                                       ; preds = %5, %1
21*9880d681SAndroid Build Coastguard Worker  %6 = phi i8* [ %19, %5 ], [ %0, %1 ]
22*9880d681SAndroid Build Coastguard Worker  %7 = tail call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.arm.neon.vld3.v16i8.p0i8(i8* null, i32 1)
23*9880d681SAndroid Build Coastguard Worker  %8 = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } %7, 0
24*9880d681SAndroid Build Coastguard Worker  %9 = getelementptr inbounds i8, i8* null, i32 3
25*9880d681SAndroid Build Coastguard Worker  %10 = tail call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.arm.neon.vld3.v16i8.p0i8(i8* %9, i32 1)
26*9880d681SAndroid Build Coastguard Worker  %11 = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } %10, 2
27*9880d681SAndroid Build Coastguard Worker  %12 = tail call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.arm.neon.vld3.v16i8.p0i8(i8* %6, i32 1)
28*9880d681SAndroid Build Coastguard Worker  %13 = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } %12, 0
29*9880d681SAndroid Build Coastguard Worker  %14 = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } %12, 1
30*9880d681SAndroid Build Coastguard Worker  %15 = getelementptr inbounds i8, i8* %6, i32 3
31*9880d681SAndroid Build Coastguard Worker  %16 = tail call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.arm.neon.vld3.v16i8.p0i8(i8* %15, i32 1)
32*9880d681SAndroid Build Coastguard Worker  %17 = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } %16, 1
33*9880d681SAndroid Build Coastguard Worker  %18 = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } %16, 2
34*9880d681SAndroid Build Coastguard Worker  %19 = getelementptr inbounds i8, i8* %6, i32 48
35*9880d681SAndroid Build Coastguard Worker  %20 = bitcast <16 x i8> %13 to <2 x i64>
36*9880d681SAndroid Build Coastguard Worker  %21 = bitcast <16 x i8> %8 to <2 x i64>
37*9880d681SAndroid Build Coastguard Worker  %22 = bitcast <16 x i8> %14 to <2 x i64>
38*9880d681SAndroid Build Coastguard Worker  %23 = shufflevector <2 x i64> %22, <2 x i64> undef, <1 x i32> zeroinitializer
39*9880d681SAndroid Build Coastguard Worker  %24 = bitcast <1 x i64> %23 to <8 x i8>
40*9880d681SAndroid Build Coastguard Worker  %25 = zext <8 x i8> %24 to <8 x i16>
41*9880d681SAndroid Build Coastguard Worker  %26 = sub <8 x i16> zeroinitializer, %25
42*9880d681SAndroid Build Coastguard Worker  %27 = bitcast <16 x i8> %17 to <2 x i64>
43*9880d681SAndroid Build Coastguard Worker  %28 = tail call <8 x i16> @llvm.arm.neon.vabs.v8i16(<8 x i16> %26) nounwind
44*9880d681SAndroid Build Coastguard Worker  %29 = mul <8 x i16> %28, %28
45*9880d681SAndroid Build Coastguard Worker  %30 = add <8 x i16> zeroinitializer, %29
46*9880d681SAndroid Build Coastguard Worker  %31 = tail call <8 x i16> @llvm.arm.neon.vmaxu.v8i16(<8 x i16> undef, <8 x i16> %30) nounwind
47*9880d681SAndroid Build Coastguard Worker  %32 = bitcast <16 x i8> %11 to <2 x i64>
48*9880d681SAndroid Build Coastguard Worker  %33 = shufflevector <2 x i64> %32, <2 x i64> undef, <1 x i32> zeroinitializer
49*9880d681SAndroid Build Coastguard Worker  %34 = bitcast <1 x i64> %33 to <8 x i8>
50*9880d681SAndroid Build Coastguard Worker  %35 = zext <8 x i8> %34 to <8 x i16>
51*9880d681SAndroid Build Coastguard Worker  %36 = sub <8 x i16> %35, zeroinitializer
52*9880d681SAndroid Build Coastguard Worker  %37 = bitcast <16 x i8> %18 to <2 x i64>
53*9880d681SAndroid Build Coastguard Worker  %38 = shufflevector <2 x i64> %37, <2 x i64> undef, <1 x i32> zeroinitializer
54*9880d681SAndroid Build Coastguard Worker  %39 = bitcast <1 x i64> %38 to <8 x i8>
55*9880d681SAndroid Build Coastguard Worker  %40 = zext <8 x i8> %39 to <8 x i16>
56*9880d681SAndroid Build Coastguard Worker  %41 = sub <8 x i16> zeroinitializer, %40
57*9880d681SAndroid Build Coastguard Worker  %42 = tail call <8 x i16> @llvm.arm.neon.vabs.v8i16(<8 x i16> %36) nounwind
58*9880d681SAndroid Build Coastguard Worker  %43 = tail call <8 x i16> @llvm.arm.neon.vabs.v8i16(<8 x i16> %41) nounwind
59*9880d681SAndroid Build Coastguard Worker  %44 = mul <8 x i16> %42, %42
60*9880d681SAndroid Build Coastguard Worker  %45 = mul <8 x i16> %43, %43
61*9880d681SAndroid Build Coastguard Worker  %46 = add <8 x i16> %45, %44
62*9880d681SAndroid Build Coastguard Worker  %47 = tail call <8 x i16> @llvm.arm.neon.vmaxu.v8i16(<8 x i16> %31, <8 x i16> %46) nounwind
63*9880d681SAndroid Build Coastguard Worker  %48 = bitcast <8 x i16> %47 to <2 x i64>
64*9880d681SAndroid Build Coastguard Worker  %49 = shufflevector <2 x i64> %48, <2 x i64> undef, <1 x i32> zeroinitializer
65*9880d681SAndroid Build Coastguard Worker  %50 = bitcast <1 x i64> %49 to <4 x i16>
66*9880d681SAndroid Build Coastguard Worker  %51 = tail call <4 x i32> @llvm.arm.neon.vmullu.v4i32(<4 x i16> %50, <4 x i16> undef) nounwind
67*9880d681SAndroid Build Coastguard Worker  %52 = tail call <4 x i16> @llvm.arm.neon.vqshiftnu.v4i16(<4 x i32> %51, <4 x i32> <i32 -6, i32 -6, i32 -6, i32 -6>)
68*9880d681SAndroid Build Coastguard Worker  %53 = bitcast <4 x i16> %52 to <1 x i64>
69*9880d681SAndroid Build Coastguard Worker  %54 = shufflevector <1 x i64> %53, <1 x i64> undef, <2 x i32> <i32 0, i32 1>
70*9880d681SAndroid Build Coastguard Worker  %55 = bitcast <2 x i64> %54 to <8 x i16>
71*9880d681SAndroid Build Coastguard Worker  %56 = tail call <8 x i8> @llvm.arm.neon.vshiftn.v8i8(<8 x i16> %55, <8 x i16> <i16 -8, i16 -8, i16 -8, i16 -8, i16 -8, i16 -8, i16 -8, i16 -8>)
72*9880d681SAndroid Build Coastguard Worker  %57 = shufflevector <2 x i64> %20, <2 x i64> undef, <1 x i32> <i32 1>
73*9880d681SAndroid Build Coastguard Worker  %58 = bitcast <1 x i64> %57 to <8 x i8>
74*9880d681SAndroid Build Coastguard Worker  %59 = zext <8 x i8> %58 to <8 x i16>
75*9880d681SAndroid Build Coastguard Worker  %60 = sub <8 x i16> zeroinitializer, %59
76*9880d681SAndroid Build Coastguard Worker  %61 = shufflevector <2 x i64> %21, <2 x i64> undef, <1 x i32> <i32 1>
77*9880d681SAndroid Build Coastguard Worker  %62 = bitcast <1 x i64> %61 to <8 x i8>
78*9880d681SAndroid Build Coastguard Worker  %63 = zext <8 x i8> %62 to <8 x i16>
79*9880d681SAndroid Build Coastguard Worker  %64 = sub <8 x i16> %63, zeroinitializer
80*9880d681SAndroid Build Coastguard Worker  %65 = tail call <8 x i16> @llvm.arm.neon.vabs.v8i16(<8 x i16> %60) nounwind
81*9880d681SAndroid Build Coastguard Worker  %66 = mul <8 x i16> %65, %65
82*9880d681SAndroid Build Coastguard Worker  %67 = add <8 x i16> zeroinitializer, %66
83*9880d681SAndroid Build Coastguard Worker  %68 = shufflevector <2 x i64> %27, <2 x i64> undef, <1 x i32> <i32 1>
84*9880d681SAndroid Build Coastguard Worker  %69 = bitcast <1 x i64> %68 to <8 x i8>
85*9880d681SAndroid Build Coastguard Worker  %70 = zext <8 x i8> %69 to <8 x i16>
86*9880d681SAndroid Build Coastguard Worker  %71 = sub <8 x i16> zeroinitializer, %70
87*9880d681SAndroid Build Coastguard Worker  %72 = tail call <8 x i16> @llvm.arm.neon.vabs.v8i16(<8 x i16> undef) nounwind
88*9880d681SAndroid Build Coastguard Worker  %73 = tail call <8 x i16> @llvm.arm.neon.vabs.v8i16(<8 x i16> %71) nounwind
89*9880d681SAndroid Build Coastguard Worker  %74 = mul <8 x i16> %72, %72
90*9880d681SAndroid Build Coastguard Worker  %75 = mul <8 x i16> %73, %73
91*9880d681SAndroid Build Coastguard Worker  %76 = add <8 x i16> %75, %74
92*9880d681SAndroid Build Coastguard Worker  %77 = shufflevector <2 x i64> %32, <2 x i64> undef, <1 x i32> <i32 1>
93*9880d681SAndroid Build Coastguard Worker  %78 = bitcast <1 x i64> %77 to <8 x i8>
94*9880d681SAndroid Build Coastguard Worker  %79 = zext <8 x i8> %78 to <8 x i16>
95*9880d681SAndroid Build Coastguard Worker  %80 = sub <8 x i16> %79, zeroinitializer
96*9880d681SAndroid Build Coastguard Worker  %81 = tail call <8 x i16> @llvm.arm.neon.vabs.v8i16(<8 x i16> %80) nounwind
97*9880d681SAndroid Build Coastguard Worker  %82 = mul <8 x i16> %81, %81
98*9880d681SAndroid Build Coastguard Worker  %83 = add <8 x i16> zeroinitializer, %82
99*9880d681SAndroid Build Coastguard Worker  %84 = tail call <8 x i16> @llvm.arm.neon.vmaxu.v8i16(<8 x i16> %76, <8 x i16> %83) nounwind
100*9880d681SAndroid Build Coastguard Worker  %85 = tail call <8 x i16> @llvm.arm.neon.vmaxu.v8i16(<8 x i16> %67, <8 x i16> %84) nounwind
101*9880d681SAndroid Build Coastguard Worker  %86 = bitcast <8 x i16> %85 to <2 x i64>
102*9880d681SAndroid Build Coastguard Worker  %87 = shufflevector <2 x i64> %86, <2 x i64> undef, <1 x i32> <i32 1>
103*9880d681SAndroid Build Coastguard Worker  %88 = bitcast <1 x i64> %87 to <4 x i16>
104*9880d681SAndroid Build Coastguard Worker  %89 = tail call <4 x i32> @llvm.arm.neon.vmullu.v4i32(<4 x i16> %88, <4 x i16> undef) nounwind
105*9880d681SAndroid Build Coastguard Worker  %90 = tail call <4 x i16> @llvm.arm.neon.vqrshiftnu.v4i16(<4 x i32> %89, <4 x i32> <i32 -6, i32 -6, i32 -6, i32 -6>)
106*9880d681SAndroid Build Coastguard Worker  %91 = bitcast <4 x i16> %90 to <1 x i64>
107*9880d681SAndroid Build Coastguard Worker  %92 = shufflevector <1 x i64> undef, <1 x i64> %91, <2 x i32> <i32 0, i32 1>
108*9880d681SAndroid Build Coastguard Worker  %93 = bitcast <2 x i64> %92 to <8 x i16>
109*9880d681SAndroid Build Coastguard Worker  %94 = tail call <8 x i8> @llvm.arm.neon.vshiftn.v8i8(<8 x i16> %93, <8 x i16> <i16 -8, i16 -8, i16 -8, i16 -8, i16 -8, i16 -8, i16 -8, i16 -8>)
110*9880d681SAndroid Build Coastguard Worker  %95 = bitcast <8 x i8> %56 to <1 x i64>
111*9880d681SAndroid Build Coastguard Worker  %96 = bitcast <8 x i8> %94 to <1 x i64>
112*9880d681SAndroid Build Coastguard Worker  %97 = shufflevector <1 x i64> %95, <1 x i64> %96, <2 x i32> <i32 0, i32 1>
113*9880d681SAndroid Build Coastguard Worker  %98 = bitcast <2 x i64> %97 to <16 x i8>
114*9880d681SAndroid Build Coastguard Worker  tail call void @llvm.arm.neon.vst1.p0i8.v16i8(i8* null, <16 x i8> %98, i32 1)
115*9880d681SAndroid Build Coastguard Worker  %99 = icmp slt i32 undef, undef
116*9880d681SAndroid Build Coastguard Worker  br i1 %99, label %5, label %3
117*9880d681SAndroid Build Coastguard Worker}
118*9880d681SAndroid Build Coastguard Worker
119*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.arm.neon.vqshiftnu.v4i16(<4 x i32>, <4 x i32>) nounwind readnone
120*9880d681SAndroid Build Coastguard Worker
121*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @llvm.arm.neon.vshiftn.v8i8(<8 x i16>, <8 x i16>) nounwind readnone
122*9880d681SAndroid Build Coastguard Worker
123*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.arm.neon.vqrshiftnu.v4i16(<4 x i32>, <4 x i32>) nounwind readnone
124*9880d681SAndroid Build Coastguard Worker
125*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.arm.neon.vmullu.v4i32(<4 x i16>, <4 x i16>) nounwind readnone
126*9880d681SAndroid Build Coastguard Worker
127*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.arm.neon.vmaxu.v8i16(<8 x i16>, <8 x i16>) nounwind readnone
128*9880d681SAndroid Build Coastguard Worker
129*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.arm.neon.vabs.v8i16(<8 x i16>) nounwind readnone
130