1 ; RUN: llc -march=mips < %s
2 ; RUN: llc -march=mips -mattr=+msa,+fp64 < %s
4 ; This test originally failed to select instructions for extract_vector_elt for
6 ; It should at least successfully build.
8 define void @autogen_SD3997499501(i8*, i32*, i64*, i32, i64, i8) {
10 %A4 = alloca <1 x double>
17 %E = extractelement <16 x i64> <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>, i32 14
18 %Shuff = shufflevector <2 x i1> zeroinitializer, <2 x i1> zeroinitializer, <2 x i32> <i32 1, i32 3>
19 %I = insertelement <4 x i64> zeroinitializer, i64 0, i32 3
20 %Tr = trunc <1 x i64> zeroinitializer to <1 x i8>
21 %Sl = select i1 false, double* %A1, double* %A
22 %Cmp = icmp ne <2 x i64> zeroinitializer, zeroinitializer
23 %L5 = load double* %Sl
24 store float -4.374162e+06, float* %A2
25 %E6 = extractelement <4 x i64> zeroinitializer, i32 3
26 %Shuff7 = shufflevector <4 x i64> zeroinitializer, <4 x i64> %I, <4 x i32> <i32 2, i32 4, i32 6, i32 undef>
27 %I8 = insertelement <2 x i1> %Shuff, i1 false, i32 0
28 %B = ashr <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>, <i32 -1, i32 -1, i32 -1, i32 -1>
29 %PC = bitcast float* %A2 to float*
30 %Sl9 = select i1 false, i32 82299, i32 0
31 %Cmp10 = icmp slt i8 97, %5
34 CF72: ; preds = %CF72, %CF80, %CF78, %BB
35 %L11 = load double* %Sl
36 store double 0.000000e+00, double* %Sl
37 %E12 = extractelement <2 x i1> zeroinitializer, i32 0
38 br i1 %E12, label %CF72, label %CF80
41 %Shuff13 = shufflevector <2 x i1> zeroinitializer, <2 x i1> zeroinitializer, <2 x i32> <i32 3, i32 1>
42 %I14 = insertelement <2 x i64> zeroinitializer, i64 %4, i32 1
43 %B15 = fadd double %L5, 0.000000e+00
44 %BC = bitcast i32 0 to float
45 %Sl16 = select i1 %E12, float 0xC7957ED940000000, float %BC
46 %Cmp17 = icmp eq i32 136082, 471909
47 br i1 %Cmp17, label %CF72, label %CF77
49 CF77: ; preds = %CF77, %CF80
50 %L18 = load double* %Sl
51 store double 0.000000e+00, double* %Sl
52 %E19 = extractelement <2 x i1> zeroinitializer, i32 0
53 br i1 %E19, label %CF77, label %CF78
56 %Shuff20 = shufflevector <2 x i1> zeroinitializer, <2 x i1> zeroinitializer, <2 x i32> <i32 1, i32 3>
57 %I21 = insertelement <8 x i1> zeroinitializer, i1 %Cmp10, i32 7
58 %B22 = sdiv <4 x i64> %Shuff7, zeroinitializer
59 %FC = uitofp i8 97 to double
60 %Sl23 = select i1 %Cmp10, <2 x i1> zeroinitializer, <2 x i1> zeroinitializer
61 %L24 = load double* %Sl
62 store float %Sl16, float* %PC
63 %E25 = extractelement <2 x i1> %Shuff, i32 1
64 br i1 %E25, label %CF72, label %CF76
67 %Shuff26 = shufflevector <4 x i64> zeroinitializer, <4 x i64> %B22, <4 x i32> <i32 undef, i32 undef, i32 0, i32 undef>
68 %I27 = insertelement <4 x i64> zeroinitializer, i64 %E, i32 2
69 %B28 = mul <4 x i64> %I27, zeroinitializer
70 %ZE = zext <8 x i1> zeroinitializer to <8 x i64>
71 %Sl29 = select i1 %Cmp17, float -4.374162e+06, float -4.374162e+06
73 store double %L5, double* %Sl
74 %E31 = extractelement <8 x i1> zeroinitializer, i32 5
77 CF: ; preds = %CF, %CF81, %CF76
78 %Shuff32 = shufflevector <16 x i64> <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>, <16 x i64> <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>, <16 x i32> <i32 8, i32 undef, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 undef, i32 26, i32 28, i32 30, i32 undef, i32 2, i32 4, i32 6>
79 %I33 = insertelement <8 x i1> zeroinitializer, i1 false, i32 2
80 %BC34 = bitcast <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1> to <4 x float>
81 %Sl35 = select i1 %E12, <2 x i1> %I8, <2 x i1> zeroinitializer
82 %Cmp36 = fcmp oge double 0xC2C3BAE2D5C18360, 0xC2C3BAE2D5C18360
83 br i1 %Cmp36, label %CF, label %CF74
85 CF74: ; preds = %CF74, %CF
86 %L37 = load float* %PC
87 store double 0.000000e+00, double* %Sl
88 %E38 = extractelement <2 x i1> %Sl23, i32 1
89 br i1 %E38, label %CF74, label %CF75
91 CF75: ; preds = %CF75, %CF82, %CF74
92 %Shuff39 = shufflevector <2 x i1> %Shuff13, <2 x i1> zeroinitializer, <2 x i32> <i32 undef, i32 2>
93 %I40 = insertelement <4 x i64> zeroinitializer, i64 %4, i32 2
94 %Sl41 = select i1 %Cmp10, i32 0, i32 %3
95 %Cmp42 = icmp ne <1 x i64> zeroinitializer, zeroinitializer
96 %L43 = load double* %Sl
98 %E44 = extractelement <2 x i1> %Shuff20, i32 1
99 br i1 %E44, label %CF75, label %CF82
101 CF82: ; preds = %CF75
102 %Shuff45 = shufflevector <2 x i1> %Sl23, <2 x i1> %Sl23, <2 x i32> <i32 2, i32 0>
103 %I46 = insertelement <4 x i64> zeroinitializer, i64 0, i32 0
104 %B47 = sub i64 %E, %E6
105 %Sl48 = select i1 %Cmp10, double %L5, double %L43
106 %Cmp49 = icmp uge i64 %4, %B47
107 br i1 %Cmp49, label %CF75, label %CF81
109 CF81: ; preds = %CF82
111 store double %L43, double* %Sl
112 %E51 = extractelement <4 x i64> %Shuff7, i32 3
113 %Shuff52 = shufflevector <4 x float> %BC34, <4 x float> %BC34, <4 x i32> <i32 2, i32 4, i32 6, i32 0>
114 %I53 = insertelement <2 x i1> %Cmp, i1 %E25, i32 0
115 %B54 = fdiv double %L24, %L43
116 %BC55 = bitcast <4 x i64> zeroinitializer to <4 x double>
117 %Sl56 = select i1 false, i8 %5, i8 97
119 store i8 %L50, i8* %0
120 %E58 = extractelement <2 x i1> %Shuff20, i32 1
121 br i1 %E58, label %CF, label %CF73
123 CF73: ; preds = %CF73, %CF81
124 %Shuff59 = shufflevector <2 x i1> %Shuff13, <2 x i1> %Shuff45, <2 x i32> <i32 undef, i32 0>
125 %I60 = insertelement <4 x float> %Shuff52, float -4.374162e+06, i32 0
126 %B61 = mul <4 x i64> %I46, zeroinitializer
127 %PC62 = bitcast double* %A3 to float*
128 %Sl63 = select i1 %Cmp10, <1 x i64> zeroinitializer, <1 x i64> zeroinitializer
129 %Cmp64 = icmp ne <2 x i1> %Cmp, %Shuff
130 %L65 = load double* %A1
131 store float -4.374162e+06, float* %PC62
132 %E66 = extractelement <8 x i1> %I21, i32 3
133 br i1 %E66, label %CF73, label %CF79
135 CF79: ; preds = %CF79, %CF73
136 %Shuff67 = shufflevector <8 x i1> %I21, <8 x i1> %I21, <8 x i32> <i32 6, i32 8, i32 10, i32 12, i32 14, i32 0, i32 undef, i32 4>
137 %I68 = insertelement <1 x i1> %Cmp42, i1 %E25, i32 0
138 %B69 = sdiv <16 x i64> <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>
139 %Sl70 = select i1 %Cmp49, <2 x i1> %Sl23, <2 x i1> %Shuff45
140 %Cmp71 = icmp ne i1 false, false
141 br i1 %Cmp71, label %CF79, label %CF83
143 CF83: ; preds = %CF79
144 store double 0.000000e+00, double* %Sl
145 store float %BC, float* %PC62
146 store double %Sl48, double* %Sl
147 store double %FC, double* %Sl
148 store float %BC, float* %PC62