[mips][msa] Added a regression test that depended on multiple patches to pass.
[oota-llvm.git] / test / CodeGen / Mips / msa / llvm-stress-s3997499501.ll
1 ; RUN: llc -march=mips < %s
2 ; RUN: llc -march=mips -mattr=+msa,+fp64 < %s
3
4 ; This test originally failed to select instructions for extract_vector_elt for
5 ; v4f32 on MSA.
6 ; It should at least successfully build.
7
8 define void @autogen_SD3997499501(i8*, i32*, i64*, i32, i64, i8) {
9 BB:
10   %A4 = alloca <1 x double>
11   %A3 = alloca double
12   %A2 = alloca float
13   %A1 = alloca double
14   %A = alloca double
15   %L = load i8* %0
16   store i8 97, i8* %0
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
32   br label %CF72
33
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
39
40 CF80:                                             ; preds = %CF72
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
48
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
54
55 CF78:                                             ; preds = %CF77
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
65
66 CF76:                                             ; preds = %CF78
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
72   %L30 = load i8* %0
73   store double %L5, double* %Sl
74   %E31 = extractelement <8 x i1> zeroinitializer, i32 5
75   br label %CF
76
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
84
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
90
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
97   store i64 %4, i64* %2
98   %E44 = extractelement <2 x i1> %Shuff20, i32 1
99   br i1 %E44, label %CF75, label %CF82
100
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
108
109 CF81:                                             ; preds = %CF82
110   %L50 = load i8* %0
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
118   %L57 = load i8* %0
119   store i8 %L50, i8* %0
120   %E58 = extractelement <2 x i1> %Shuff20, i32 1
121   br i1 %E58, label %CF, label %CF73
122
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
134
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
142
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
149   ret void
150 }