[InstCombine] Signed saturation patterns
[llvm-core.git] / test / Transforms / SLPVectorizer / X86 / used-reduced-op.ll
bloba8752bcff3e6d5409550baa240c9ad7ece0df31e
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -slp-vectorizer -S -o - -mtriple=x86_64-unknown-linux-gnu -mcpu=haswell < %s | FileCheck %s
4 @k = external dso_local constant [8 x [4 x i32]], align 16
5 @l = external dso_local global [366 x i32], align 16
7 ; Function Attrs: nofree norecurse noreturn nounwind writeonly
8 define void @n() local_unnamed_addr #0 {
9 ; CHECK-LABEL: @n(
10 ; CHECK-NEXT:  entry:
11 ; CHECK-NEXT:    [[TMP0:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 0, i64 0), align 16
12 ; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, <4 x i32>* bitcast (i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 0, i64 1) to <4 x i32>*), align 4
13 ; CHECK-NEXT:    [[TMP2:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 1, i64 1), align 4
14 ; CHECK-NEXT:    [[TMP3:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 1, i64 2), align 8
15 ; CHECK-NEXT:    [[TMP4:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 1, i64 3), align 4
16 ; CHECK-NEXT:    [[TMP5:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 2, i64 0), align 16
17 ; CHECK-NEXT:    [[TMP6:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 2, i64 1), align 4
18 ; CHECK-NEXT:    [[TMP7:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 2, i64 2), align 8
19 ; CHECK-NEXT:    [[TMP8:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 2, i64 3), align 4
20 ; CHECK-NEXT:    [[TMP9:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 3, i64 0), align 16
21 ; CHECK-NEXT:    [[TMP10:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 3, i64 1), align 4
22 ; CHECK-NEXT:    [[TMP11:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 3, i64 2), align 8
23 ; CHECK-NEXT:    [[TMP12:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 3, i64 3), align 4
24 ; CHECK-NEXT:    [[TMP13:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 4, i64 0), align 16
25 ; CHECK-NEXT:    [[TMP14:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 4, i64 1), align 4
26 ; CHECK-NEXT:    [[TMP15:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 4, i64 2), align 8
27 ; CHECK-NEXT:    [[TMP16:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 4, i64 3), align 4
28 ; CHECK-NEXT:    [[TMP17:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 5, i64 0), align 16
29 ; CHECK-NEXT:    [[TMP18:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 5, i64 1), align 4
30 ; CHECK-NEXT:    [[TMP19:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 5, i64 2), align 8
31 ; CHECK-NEXT:    [[TMP20:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 5, i64 3), align 4
32 ; CHECK-NEXT:    [[TMP21:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 6, i64 0), align 16
33 ; CHECK-NEXT:    [[TMP22:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 6, i64 1), align 4
34 ; CHECK-NEXT:    [[TMP23:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 6, i64 2), align 8
35 ; CHECK-NEXT:    [[TMP24:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 6, i64 3), align 4
36 ; CHECK-NEXT:    [[TMP25:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 7, i64 0), align 16
37 ; CHECK-NEXT:    [[TMP26:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 7, i64 1), align 4
38 ; CHECK-NEXT:    [[TMP27:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 7, i64 2), align 8
39 ; CHECK-NEXT:    [[TMP28:%.*]] = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 7, i64 3), align 4
40 ; CHECK-NEXT:    br label [[FOR_COND:%.*]]
41 ; CHECK:       for.cond:
42 ; CHECK-NEXT:    [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_COND]] ], [ 0, [[ENTRY:%.*]] ]
43 ; CHECK-NEXT:    [[B_0:%.*]] = phi i32 [ [[SPEC_SELECT8_3_7:%.*]], [[FOR_COND]] ], [ undef, [[ENTRY]] ]
44 ; CHECK-NEXT:    [[TMP29:%.*]] = trunc i64 [[INDVARS_IV]] to i32
45 ; CHECK-NEXT:    [[TMP30:%.*]] = add i32 [[TMP29]], -183
46 ; CHECK-NEXT:    [[SUB:%.*]] = sub i32 [[TMP30]], [[TMP0]]
47 ; CHECK-NEXT:    [[TMP31:%.*]] = icmp slt i32 [[SUB]], 0
48 ; CHECK-NEXT:    [[NEG:%.*]] = sub nsw i32 0, [[SUB]]
49 ; CHECK-NEXT:    [[TMP32:%.*]] = select i1 [[TMP31]], i32 [[NEG]], i32 [[SUB]]
50 ; CHECK-NEXT:    [[TMP33:%.*]] = insertelement <4 x i32> undef, i32 [[TMP30]], i32 0
51 ; CHECK-NEXT:    [[TMP34:%.*]] = insertelement <4 x i32> [[TMP33]], i32 [[TMP30]], i32 1
52 ; CHECK-NEXT:    [[TMP35:%.*]] = insertelement <4 x i32> [[TMP34]], i32 [[TMP30]], i32 2
53 ; CHECK-NEXT:    [[TMP36:%.*]] = insertelement <4 x i32> [[TMP35]], i32 [[TMP30]], i32 3
54 ; CHECK-NEXT:    [[TMP37:%.*]] = sub <4 x i32> [[TMP36]], [[TMP1]]
55 ; CHECK-NEXT:    [[TMP38:%.*]] = icmp slt <4 x i32> [[TMP37]], zeroinitializer
56 ; CHECK-NEXT:    [[TMP39:%.*]] = sub nsw <4 x i32> zeroinitializer, [[TMP37]]
57 ; CHECK-NEXT:    [[TMP40:%.*]] = select <4 x i1> [[TMP38]], <4 x i32> [[TMP39]], <4 x i32> [[TMP37]]
58 ; CHECK-NEXT:    [[RDX_SHUF:%.*]] = shufflevector <4 x i32> [[TMP40]], <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
59 ; CHECK-NEXT:    [[RDX_MINMAX_CMP:%.*]] = icmp slt <4 x i32> [[TMP40]], [[RDX_SHUF]]
60 ; CHECK-NEXT:    [[RDX_MINMAX_SELECT:%.*]] = select <4 x i1> [[RDX_MINMAX_CMP]], <4 x i32> [[TMP40]], <4 x i32> [[RDX_SHUF]]
61 ; CHECK-NEXT:    [[RDX_SHUF1:%.*]] = shufflevector <4 x i32> [[RDX_MINMAX_SELECT]], <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
62 ; CHECK-NEXT:    [[RDX_MINMAX_CMP2:%.*]] = icmp slt <4 x i32> [[RDX_MINMAX_SELECT]], [[RDX_SHUF1]]
63 ; CHECK-NEXT:    [[RDX_MINMAX_SELECT3:%.*]] = select <4 x i1> [[RDX_MINMAX_CMP2]], <4 x i32> [[RDX_MINMAX_SELECT]], <4 x i32> [[RDX_SHUF1]]
64 ; CHECK-NEXT:    [[TMP41:%.*]] = extractelement <4 x i32> [[RDX_MINMAX_SELECT3]], i32 0
65 ; CHECK-NEXT:    [[TMP42:%.*]] = icmp slt i32 [[TMP41]], [[TMP32]]
66 ; CHECK-NEXT:    [[TMP43:%.*]] = select i1 [[TMP42]], i32 [[TMP41]], i32 [[TMP32]]
67 ; CHECK-NEXT:    [[TMP44:%.*]] = icmp slt i32 [[TMP43]], [[B_0]]
68 ; CHECK-NEXT:    [[OP_EXTRA:%.*]] = select i1 [[TMP44]], i32 [[TMP43]], i32 [[B_0]]
69 ; CHECK-NEXT:    [[SUB_1_1:%.*]] = sub i32 [[TMP30]], [[TMP2]]
70 ; CHECK-NEXT:    [[TMP45:%.*]] = icmp slt i32 [[SUB_1_1]], 0
71 ; CHECK-NEXT:    [[NEG_1_1:%.*]] = sub nsw i32 0, [[SUB_1_1]]
72 ; CHECK-NEXT:    [[TMP46:%.*]] = select i1 [[TMP45]], i32 [[NEG_1_1]], i32 [[SUB_1_1]]
73 ; CHECK-NEXT:    [[CMP12_1_1:%.*]] = icmp slt i32 [[TMP46]], [[OP_EXTRA]]
74 ; CHECK-NEXT:    [[NARROW:%.*]] = or i1 [[CMP12_1_1]], undef
75 ; CHECK-NEXT:    [[SPEC_SELECT8_1_1:%.*]] = select i1 [[CMP12_1_1]], i32 [[TMP46]], i32 [[OP_EXTRA]]
76 ; CHECK-NEXT:    [[SUB_2_1:%.*]] = sub i32 [[TMP30]], [[TMP3]]
77 ; CHECK-NEXT:    [[TMP47:%.*]] = icmp slt i32 [[SUB_2_1]], 0
78 ; CHECK-NEXT:    [[NEG_2_1:%.*]] = sub nsw i32 0, [[SUB_2_1]]
79 ; CHECK-NEXT:    [[TMP48:%.*]] = select i1 [[TMP47]], i32 [[NEG_2_1]], i32 [[SUB_2_1]]
80 ; CHECK-NEXT:    [[CMP12_2_1:%.*]] = icmp slt i32 [[TMP48]], [[SPEC_SELECT8_1_1]]
81 ; CHECK-NEXT:    [[NARROW34:%.*]] = or i1 [[CMP12_2_1]], [[NARROW]]
82 ; CHECK-NEXT:    [[SPEC_SELECT8_2_1:%.*]] = select i1 [[CMP12_2_1]], i32 [[TMP48]], i32 [[SPEC_SELECT8_1_1]]
83 ; CHECK-NEXT:    [[SUB_3_1:%.*]] = sub i32 [[TMP30]], [[TMP4]]
84 ; CHECK-NEXT:    [[TMP49:%.*]] = icmp slt i32 [[SUB_3_1]], 0
85 ; CHECK-NEXT:    [[NEG_3_1:%.*]] = sub nsw i32 0, [[SUB_3_1]]
86 ; CHECK-NEXT:    [[TMP50:%.*]] = select i1 [[TMP49]], i32 [[NEG_3_1]], i32 [[SUB_3_1]]
87 ; CHECK-NEXT:    [[CMP12_3_1:%.*]] = icmp slt i32 [[TMP50]], [[SPEC_SELECT8_2_1]]
88 ; CHECK-NEXT:    [[NARROW35:%.*]] = or i1 [[CMP12_3_1]], [[NARROW34]]
89 ; CHECK-NEXT:    [[SPEC_SELECT_3_1:%.*]] = zext i1 [[NARROW35]] to i32
90 ; CHECK-NEXT:    [[SPEC_SELECT8_3_1:%.*]] = select i1 [[CMP12_3_1]], i32 [[TMP50]], i32 [[SPEC_SELECT8_2_1]]
91 ; CHECK-NEXT:    [[SUB_222:%.*]] = sub i32 [[TMP30]], [[TMP5]]
92 ; CHECK-NEXT:    [[TMP51:%.*]] = icmp slt i32 [[SUB_222]], 0
93 ; CHECK-NEXT:    [[NEG_223:%.*]] = sub nsw i32 0, [[SUB_222]]
94 ; CHECK-NEXT:    [[TMP52:%.*]] = select i1 [[TMP51]], i32 [[NEG_223]], i32 [[SUB_222]]
95 ; CHECK-NEXT:    [[CMP12_224:%.*]] = icmp slt i32 [[TMP52]], [[SPEC_SELECT8_3_1]]
96 ; CHECK-NEXT:    [[SPEC_SELECT8_226:%.*]] = select i1 [[CMP12_224]], i32 [[TMP52]], i32 [[SPEC_SELECT8_3_1]]
97 ; CHECK-NEXT:    [[SUB_1_2:%.*]] = sub i32 [[TMP30]], [[TMP6]]
98 ; CHECK-NEXT:    [[TMP53:%.*]] = icmp slt i32 [[SUB_1_2]], 0
99 ; CHECK-NEXT:    [[NEG_1_2:%.*]] = sub nsw i32 0, [[SUB_1_2]]
100 ; CHECK-NEXT:    [[TMP54:%.*]] = select i1 [[TMP53]], i32 [[NEG_1_2]], i32 [[SUB_1_2]]
101 ; CHECK-NEXT:    [[CMP12_1_2:%.*]] = icmp slt i32 [[TMP54]], [[SPEC_SELECT8_226]]
102 ; CHECK-NEXT:    [[TMP55:%.*]] = or i1 [[CMP12_1_2]], [[CMP12_224]]
103 ; CHECK-NEXT:    [[SPEC_SELECT8_1_2:%.*]] = select i1 [[CMP12_1_2]], i32 [[TMP54]], i32 [[SPEC_SELECT8_226]]
104 ; CHECK-NEXT:    [[SUB_2_2:%.*]] = sub i32 [[TMP30]], [[TMP7]]
105 ; CHECK-NEXT:    [[TMP56:%.*]] = icmp slt i32 [[SUB_2_2]], 0
106 ; CHECK-NEXT:    [[NEG_2_2:%.*]] = sub nsw i32 0, [[SUB_2_2]]
107 ; CHECK-NEXT:    [[TMP57:%.*]] = select i1 [[TMP56]], i32 [[NEG_2_2]], i32 [[SUB_2_2]]
108 ; CHECK-NEXT:    [[CMP12_2_2:%.*]] = icmp slt i32 [[TMP57]], [[SPEC_SELECT8_1_2]]
109 ; CHECK-NEXT:    [[TMP58:%.*]] = or i1 [[CMP12_2_2]], [[TMP55]]
110 ; CHECK-NEXT:    [[SPEC_SELECT8_2_2:%.*]] = select i1 [[CMP12_2_2]], i32 [[TMP57]], i32 [[SPEC_SELECT8_1_2]]
111 ; CHECK-NEXT:    [[SUB_3_2:%.*]] = sub i32 [[TMP30]], [[TMP8]]
112 ; CHECK-NEXT:    [[TMP59:%.*]] = icmp slt i32 [[SUB_3_2]], 0
113 ; CHECK-NEXT:    [[NEG_3_2:%.*]] = sub nsw i32 0, [[SUB_3_2]]
114 ; CHECK-NEXT:    [[TMP60:%.*]] = select i1 [[TMP59]], i32 [[NEG_3_2]], i32 [[SUB_3_2]]
115 ; CHECK-NEXT:    [[CMP12_3_2:%.*]] = icmp slt i32 [[TMP60]], [[SPEC_SELECT8_2_2]]
116 ; CHECK-NEXT:    [[TMP61:%.*]] = or i1 [[CMP12_3_2]], [[TMP58]]
117 ; CHECK-NEXT:    [[SPEC_SELECT_3_2:%.*]] = select i1 [[TMP61]], i32 2, i32 [[SPEC_SELECT_3_1]]
118 ; CHECK-NEXT:    [[SPEC_SELECT8_3_2:%.*]] = select i1 [[CMP12_3_2]], i32 [[TMP60]], i32 [[SPEC_SELECT8_2_2]]
119 ; CHECK-NEXT:    [[SUB_328:%.*]] = sub i32 [[TMP30]], [[TMP9]]
120 ; CHECK-NEXT:    [[TMP62:%.*]] = icmp slt i32 [[SUB_328]], 0
121 ; CHECK-NEXT:    [[NEG_329:%.*]] = sub nsw i32 0, [[SUB_328]]
122 ; CHECK-NEXT:    [[TMP63:%.*]] = select i1 [[TMP62]], i32 [[NEG_329]], i32 [[SUB_328]]
123 ; CHECK-NEXT:    [[CMP12_330:%.*]] = icmp slt i32 [[TMP63]], [[SPEC_SELECT8_3_2]]
124 ; CHECK-NEXT:    [[SPEC_SELECT8_332:%.*]] = select i1 [[CMP12_330]], i32 [[TMP63]], i32 [[SPEC_SELECT8_3_2]]
125 ; CHECK-NEXT:    [[SUB_1_3:%.*]] = sub i32 [[TMP30]], [[TMP10]]
126 ; CHECK-NEXT:    [[TMP64:%.*]] = icmp slt i32 [[SUB_1_3]], 0
127 ; CHECK-NEXT:    [[NEG_1_3:%.*]] = sub nsw i32 0, [[SUB_1_3]]
128 ; CHECK-NEXT:    [[TMP65:%.*]] = select i1 [[TMP64]], i32 [[NEG_1_3]], i32 [[SUB_1_3]]
129 ; CHECK-NEXT:    [[CMP12_1_3:%.*]] = icmp slt i32 [[TMP65]], [[SPEC_SELECT8_332]]
130 ; CHECK-NEXT:    [[TMP66:%.*]] = or i1 [[CMP12_1_3]], [[CMP12_330]]
131 ; CHECK-NEXT:    [[SPEC_SELECT8_1_3:%.*]] = select i1 [[CMP12_1_3]], i32 [[TMP65]], i32 [[SPEC_SELECT8_332]]
132 ; CHECK-NEXT:    [[SUB_2_3:%.*]] = sub i32 [[TMP30]], [[TMP11]]
133 ; CHECK-NEXT:    [[TMP67:%.*]] = icmp slt i32 [[SUB_2_3]], 0
134 ; CHECK-NEXT:    [[NEG_2_3:%.*]] = sub nsw i32 0, [[SUB_2_3]]
135 ; CHECK-NEXT:    [[TMP68:%.*]] = select i1 [[TMP67]], i32 [[NEG_2_3]], i32 [[SUB_2_3]]
136 ; CHECK-NEXT:    [[CMP12_2_3:%.*]] = icmp slt i32 [[TMP68]], [[SPEC_SELECT8_1_3]]
137 ; CHECK-NEXT:    [[TMP69:%.*]] = or i1 [[CMP12_2_3]], [[TMP66]]
138 ; CHECK-NEXT:    [[SPEC_SELECT8_2_3:%.*]] = select i1 [[CMP12_2_3]], i32 [[TMP68]], i32 [[SPEC_SELECT8_1_3]]
139 ; CHECK-NEXT:    [[SUB_3_3:%.*]] = sub i32 [[TMP30]], [[TMP12]]
140 ; CHECK-NEXT:    [[TMP70:%.*]] = icmp slt i32 [[SUB_3_3]], 0
141 ; CHECK-NEXT:    [[NEG_3_3:%.*]] = sub nsw i32 0, [[SUB_3_3]]
142 ; CHECK-NEXT:    [[TMP71:%.*]] = select i1 [[TMP70]], i32 [[NEG_3_3]], i32 [[SUB_3_3]]
143 ; CHECK-NEXT:    [[CMP12_3_3:%.*]] = icmp slt i32 [[TMP71]], [[SPEC_SELECT8_2_3]]
144 ; CHECK-NEXT:    [[TMP72:%.*]] = or i1 [[CMP12_3_3]], [[TMP69]]
145 ; CHECK-NEXT:    [[SPEC_SELECT_3_3:%.*]] = select i1 [[TMP72]], i32 3, i32 [[SPEC_SELECT_3_2]]
146 ; CHECK-NEXT:    [[SPEC_SELECT8_3_3:%.*]] = select i1 [[CMP12_3_3]], i32 [[TMP71]], i32 [[SPEC_SELECT8_2_3]]
147 ; CHECK-NEXT:    [[SUB_4:%.*]] = sub i32 [[TMP30]], [[TMP13]]
148 ; CHECK-NEXT:    [[TMP73:%.*]] = icmp slt i32 [[SUB_4]], 0
149 ; CHECK-NEXT:    [[NEG_4:%.*]] = sub nsw i32 0, [[SUB_4]]
150 ; CHECK-NEXT:    [[TMP74:%.*]] = select i1 [[TMP73]], i32 [[NEG_4]], i32 [[SUB_4]]
151 ; CHECK-NEXT:    [[CMP12_4:%.*]] = icmp slt i32 [[TMP74]], [[SPEC_SELECT8_3_3]]
152 ; CHECK-NEXT:    [[SPEC_SELECT8_4:%.*]] = select i1 [[CMP12_4]], i32 [[TMP74]], i32 [[SPEC_SELECT8_3_3]]
153 ; CHECK-NEXT:    [[SUB_1_4:%.*]] = sub i32 [[TMP30]], [[TMP14]]
154 ; CHECK-NEXT:    [[TMP75:%.*]] = icmp slt i32 [[SUB_1_4]], 0
155 ; CHECK-NEXT:    [[NEG_1_4:%.*]] = sub nsw i32 0, [[SUB_1_4]]
156 ; CHECK-NEXT:    [[TMP76:%.*]] = select i1 [[TMP75]], i32 [[NEG_1_4]], i32 [[SUB_1_4]]
157 ; CHECK-NEXT:    [[CMP12_1_4:%.*]] = icmp slt i32 [[TMP76]], [[SPEC_SELECT8_4]]
158 ; CHECK-NEXT:    [[TMP77:%.*]] = or i1 [[CMP12_1_4]], [[CMP12_4]]
159 ; CHECK-NEXT:    [[SPEC_SELECT8_1_4:%.*]] = select i1 [[CMP12_1_4]], i32 [[TMP76]], i32 [[SPEC_SELECT8_4]]
160 ; CHECK-NEXT:    [[SUB_2_4:%.*]] = sub i32 [[TMP30]], [[TMP15]]
161 ; CHECK-NEXT:    [[TMP78:%.*]] = icmp slt i32 [[SUB_2_4]], 0
162 ; CHECK-NEXT:    [[NEG_2_4:%.*]] = sub nsw i32 0, [[SUB_2_4]]
163 ; CHECK-NEXT:    [[TMP79:%.*]] = select i1 [[TMP78]], i32 [[NEG_2_4]], i32 [[SUB_2_4]]
164 ; CHECK-NEXT:    [[CMP12_2_4:%.*]] = icmp slt i32 [[TMP79]], [[SPEC_SELECT8_1_4]]
165 ; CHECK-NEXT:    [[TMP80:%.*]] = or i1 [[CMP12_2_4]], [[TMP77]]
166 ; CHECK-NEXT:    [[SPEC_SELECT8_2_4:%.*]] = select i1 [[CMP12_2_4]], i32 [[TMP79]], i32 [[SPEC_SELECT8_1_4]]
167 ; CHECK-NEXT:    [[SUB_3_4:%.*]] = sub i32 [[TMP30]], [[TMP16]]
168 ; CHECK-NEXT:    [[TMP81:%.*]] = icmp slt i32 [[SUB_3_4]], 0
169 ; CHECK-NEXT:    [[NEG_3_4:%.*]] = sub nsw i32 0, [[SUB_3_4]]
170 ; CHECK-NEXT:    [[TMP82:%.*]] = select i1 [[TMP81]], i32 [[NEG_3_4]], i32 [[SUB_3_4]]
171 ; CHECK-NEXT:    [[CMP12_3_4:%.*]] = icmp slt i32 [[TMP82]], [[SPEC_SELECT8_2_4]]
172 ; CHECK-NEXT:    [[TMP83:%.*]] = or i1 [[CMP12_3_4]], [[TMP80]]
173 ; CHECK-NEXT:    [[SPEC_SELECT_3_4:%.*]] = select i1 [[TMP83]], i32 4, i32 [[SPEC_SELECT_3_3]]
174 ; CHECK-NEXT:    [[SPEC_SELECT8_3_4:%.*]] = select i1 [[CMP12_3_4]], i32 [[TMP82]], i32 [[SPEC_SELECT8_2_4]]
175 ; CHECK-NEXT:    [[SUB_5:%.*]] = sub i32 [[TMP30]], [[TMP17]]
176 ; CHECK-NEXT:    [[TMP84:%.*]] = icmp slt i32 [[SUB_5]], 0
177 ; CHECK-NEXT:    [[NEG_5:%.*]] = sub nsw i32 0, [[SUB_5]]
178 ; CHECK-NEXT:    [[TMP85:%.*]] = select i1 [[TMP84]], i32 [[NEG_5]], i32 [[SUB_5]]
179 ; CHECK-NEXT:    [[CMP12_5:%.*]] = icmp slt i32 [[TMP85]], [[SPEC_SELECT8_3_4]]
180 ; CHECK-NEXT:    [[SPEC_SELECT8_5:%.*]] = select i1 [[CMP12_5]], i32 [[TMP85]], i32 [[SPEC_SELECT8_3_4]]
181 ; CHECK-NEXT:    [[SUB_1_5:%.*]] = sub i32 [[TMP30]], [[TMP18]]
182 ; CHECK-NEXT:    [[TMP86:%.*]] = icmp slt i32 [[SUB_1_5]], 0
183 ; CHECK-NEXT:    [[NEG_1_5:%.*]] = sub nsw i32 0, [[SUB_1_5]]
184 ; CHECK-NEXT:    [[TMP87:%.*]] = select i1 [[TMP86]], i32 [[NEG_1_5]], i32 [[SUB_1_5]]
185 ; CHECK-NEXT:    [[CMP12_1_5:%.*]] = icmp slt i32 [[TMP87]], [[SPEC_SELECT8_5]]
186 ; CHECK-NEXT:    [[TMP88:%.*]] = or i1 [[CMP12_1_5]], [[CMP12_5]]
187 ; CHECK-NEXT:    [[SPEC_SELECT8_1_5:%.*]] = select i1 [[CMP12_1_5]], i32 [[TMP87]], i32 [[SPEC_SELECT8_5]]
188 ; CHECK-NEXT:    [[SUB_2_5:%.*]] = sub i32 [[TMP30]], [[TMP19]]
189 ; CHECK-NEXT:    [[TMP89:%.*]] = icmp slt i32 [[SUB_2_5]], 0
190 ; CHECK-NEXT:    [[NEG_2_5:%.*]] = sub nsw i32 0, [[SUB_2_5]]
191 ; CHECK-NEXT:    [[TMP90:%.*]] = select i1 [[TMP89]], i32 [[NEG_2_5]], i32 [[SUB_2_5]]
192 ; CHECK-NEXT:    [[CMP12_2_5:%.*]] = icmp slt i32 [[TMP90]], [[SPEC_SELECT8_1_5]]
193 ; CHECK-NEXT:    [[TMP91:%.*]] = or i1 [[CMP12_2_5]], [[TMP88]]
194 ; CHECK-NEXT:    [[SPEC_SELECT8_2_5:%.*]] = select i1 [[CMP12_2_5]], i32 [[TMP90]], i32 [[SPEC_SELECT8_1_5]]
195 ; CHECK-NEXT:    [[SUB_3_5:%.*]] = sub i32 [[TMP30]], [[TMP20]]
196 ; CHECK-NEXT:    [[TMP92:%.*]] = icmp slt i32 [[SUB_3_5]], 0
197 ; CHECK-NEXT:    [[NEG_3_5:%.*]] = sub nsw i32 0, [[SUB_3_5]]
198 ; CHECK-NEXT:    [[TMP93:%.*]] = select i1 [[TMP92]], i32 [[NEG_3_5]], i32 [[SUB_3_5]]
199 ; CHECK-NEXT:    [[CMP12_3_5:%.*]] = icmp slt i32 [[TMP93]], [[SPEC_SELECT8_2_5]]
200 ; CHECK-NEXT:    [[TMP94:%.*]] = or i1 [[CMP12_3_5]], [[TMP91]]
201 ; CHECK-NEXT:    [[SPEC_SELECT_3_5:%.*]] = select i1 [[TMP94]], i32 5, i32 [[SPEC_SELECT_3_4]]
202 ; CHECK-NEXT:    [[SPEC_SELECT8_3_5:%.*]] = select i1 [[CMP12_3_5]], i32 [[TMP93]], i32 [[SPEC_SELECT8_2_5]]
203 ; CHECK-NEXT:    [[SUB_6:%.*]] = sub i32 [[TMP30]], [[TMP21]]
204 ; CHECK-NEXT:    [[TMP95:%.*]] = icmp slt i32 [[SUB_6]], 0
205 ; CHECK-NEXT:    [[NEG_6:%.*]] = sub nsw i32 0, [[SUB_6]]
206 ; CHECK-NEXT:    [[TMP96:%.*]] = select i1 [[TMP95]], i32 [[NEG_6]], i32 [[SUB_6]]
207 ; CHECK-NEXT:    [[CMP12_6:%.*]] = icmp slt i32 [[TMP96]], [[SPEC_SELECT8_3_5]]
208 ; CHECK-NEXT:    [[SPEC_SELECT8_6:%.*]] = select i1 [[CMP12_6]], i32 [[TMP96]], i32 [[SPEC_SELECT8_3_5]]
209 ; CHECK-NEXT:    [[SUB_1_6:%.*]] = sub i32 [[TMP30]], [[TMP22]]
210 ; CHECK-NEXT:    [[TMP97:%.*]] = icmp slt i32 [[SUB_1_6]], 0
211 ; CHECK-NEXT:    [[NEG_1_6:%.*]] = sub nsw i32 0, [[SUB_1_6]]
212 ; CHECK-NEXT:    [[TMP98:%.*]] = select i1 [[TMP97]], i32 [[NEG_1_6]], i32 [[SUB_1_6]]
213 ; CHECK-NEXT:    [[CMP12_1_6:%.*]] = icmp slt i32 [[TMP98]], [[SPEC_SELECT8_6]]
214 ; CHECK-NEXT:    [[TMP99:%.*]] = or i1 [[CMP12_1_6]], [[CMP12_6]]
215 ; CHECK-NEXT:    [[SPEC_SELECT8_1_6:%.*]] = select i1 [[CMP12_1_6]], i32 [[TMP98]], i32 [[SPEC_SELECT8_6]]
216 ; CHECK-NEXT:    [[SUB_2_6:%.*]] = sub i32 [[TMP30]], [[TMP23]]
217 ; CHECK-NEXT:    [[TMP100:%.*]] = icmp slt i32 [[SUB_2_6]], 0
218 ; CHECK-NEXT:    [[NEG_2_6:%.*]] = sub nsw i32 0, [[SUB_2_6]]
219 ; CHECK-NEXT:    [[TMP101:%.*]] = select i1 [[TMP100]], i32 [[NEG_2_6]], i32 [[SUB_2_6]]
220 ; CHECK-NEXT:    [[CMP12_2_6:%.*]] = icmp slt i32 [[TMP101]], [[SPEC_SELECT8_1_6]]
221 ; CHECK-NEXT:    [[TMP102:%.*]] = or i1 [[CMP12_2_6]], [[TMP99]]
222 ; CHECK-NEXT:    [[SPEC_SELECT8_2_6:%.*]] = select i1 [[CMP12_2_6]], i32 [[TMP101]], i32 [[SPEC_SELECT8_1_6]]
223 ; CHECK-NEXT:    [[SUB_3_6:%.*]] = sub i32 [[TMP30]], [[TMP24]]
224 ; CHECK-NEXT:    [[TMP103:%.*]] = icmp slt i32 [[SUB_3_6]], 0
225 ; CHECK-NEXT:    [[NEG_3_6:%.*]] = sub nsw i32 0, [[SUB_3_6]]
226 ; CHECK-NEXT:    [[TMP104:%.*]] = select i1 [[TMP103]], i32 [[NEG_3_6]], i32 [[SUB_3_6]]
227 ; CHECK-NEXT:    [[CMP12_3_6:%.*]] = icmp slt i32 [[TMP104]], [[SPEC_SELECT8_2_6]]
228 ; CHECK-NEXT:    [[TMP105:%.*]] = or i1 [[CMP12_3_6]], [[TMP102]]
229 ; CHECK-NEXT:    [[SPEC_SELECT_3_6:%.*]] = select i1 [[TMP105]], i32 6, i32 [[SPEC_SELECT_3_5]]
230 ; CHECK-NEXT:    [[SPEC_SELECT8_3_6:%.*]] = select i1 [[CMP12_3_6]], i32 [[TMP104]], i32 [[SPEC_SELECT8_2_6]]
231 ; CHECK-NEXT:    [[SUB_7:%.*]] = sub i32 [[TMP30]], [[TMP25]]
232 ; CHECK-NEXT:    [[TMP106:%.*]] = icmp slt i32 [[SUB_7]], 0
233 ; CHECK-NEXT:    [[NEG_7:%.*]] = sub nsw i32 0, [[SUB_7]]
234 ; CHECK-NEXT:    [[TMP107:%.*]] = select i1 [[TMP106]], i32 [[NEG_7]], i32 [[SUB_7]]
235 ; CHECK-NEXT:    [[CMP12_7:%.*]] = icmp slt i32 [[TMP107]], [[SPEC_SELECT8_3_6]]
236 ; CHECK-NEXT:    [[SPEC_SELECT8_7:%.*]] = select i1 [[CMP12_7]], i32 [[TMP107]], i32 [[SPEC_SELECT8_3_6]]
237 ; CHECK-NEXT:    [[SUB_1_7:%.*]] = sub i32 [[TMP30]], [[TMP26]]
238 ; CHECK-NEXT:    [[TMP108:%.*]] = icmp slt i32 [[SUB_1_7]], 0
239 ; CHECK-NEXT:    [[NEG_1_7:%.*]] = sub nsw i32 0, [[SUB_1_7]]
240 ; CHECK-NEXT:    [[TMP109:%.*]] = select i1 [[TMP108]], i32 [[NEG_1_7]], i32 [[SUB_1_7]]
241 ; CHECK-NEXT:    [[CMP12_1_7:%.*]] = icmp slt i32 [[TMP109]], [[SPEC_SELECT8_7]]
242 ; CHECK-NEXT:    [[TMP110:%.*]] = or i1 [[CMP12_1_7]], [[CMP12_7]]
243 ; CHECK-NEXT:    [[SPEC_SELECT8_1_7:%.*]] = select i1 [[CMP12_1_7]], i32 [[TMP109]], i32 [[SPEC_SELECT8_7]]
244 ; CHECK-NEXT:    [[SUB_2_7:%.*]] = sub i32 [[TMP30]], [[TMP27]]
245 ; CHECK-NEXT:    [[TMP111:%.*]] = icmp slt i32 [[SUB_2_7]], 0
246 ; CHECK-NEXT:    [[NEG_2_7:%.*]] = sub nsw i32 0, [[SUB_2_7]]
247 ; CHECK-NEXT:    [[TMP112:%.*]] = select i1 [[TMP111]], i32 [[NEG_2_7]], i32 [[SUB_2_7]]
248 ; CHECK-NEXT:    [[CMP12_2_7:%.*]] = icmp slt i32 [[TMP112]], [[SPEC_SELECT8_1_7]]
249 ; CHECK-NEXT:    [[TMP113:%.*]] = or i1 [[CMP12_2_7]], [[TMP110]]
250 ; CHECK-NEXT:    [[SPEC_SELECT8_2_7:%.*]] = select i1 [[CMP12_2_7]], i32 [[TMP112]], i32 [[SPEC_SELECT8_1_7]]
251 ; CHECK-NEXT:    [[SUB_3_7:%.*]] = sub i32 [[TMP30]], [[TMP28]]
252 ; CHECK-NEXT:    [[TMP114:%.*]] = icmp slt i32 [[SUB_3_7]], 0
253 ; CHECK-NEXT:    [[NEG_3_7:%.*]] = sub nsw i32 0, [[SUB_3_7]]
254 ; CHECK-NEXT:    [[TMP115:%.*]] = select i1 [[TMP114]], i32 [[NEG_3_7]], i32 [[SUB_3_7]]
255 ; CHECK-NEXT:    [[CMP12_3_7:%.*]] = icmp slt i32 [[TMP115]], [[SPEC_SELECT8_2_7]]
256 ; CHECK-NEXT:    [[TMP116:%.*]] = or i1 [[CMP12_3_7]], [[TMP113]]
257 ; CHECK-NEXT:    [[SPEC_SELECT_3_7:%.*]] = select i1 [[TMP116]], i32 7, i32 [[SPEC_SELECT_3_6]]
258 ; CHECK-NEXT:    [[SPEC_SELECT8_3_7]] = select i1 [[CMP12_3_7]], i32 [[TMP115]], i32 [[SPEC_SELECT8_2_7]]
259 ; CHECK-NEXT:    [[K:%.*]] = getelementptr inbounds [366 x i32], [366 x i32]* @l, i64 0, i64 [[INDVARS_IV]]
260 ; CHECK-NEXT:    store i32 [[SPEC_SELECT_3_7]], i32* [[K]], align 4
261 ; CHECK-NEXT:    [[INDVARS_IV_NEXT]] = add i64 [[INDVARS_IV]], 1
262 ; CHECK-NEXT:    br label [[FOR_COND]]
264 entry:
265   %0 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 0, i64 0), align 16
266   %1 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 0, i64 1), align 4
267   %2 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 0, i64 2), align 8
268   %3 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 0, i64 3), align 4
269   %4 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 1, i64 0), align 16
270   %5 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 1, i64 1), align 4
271   %6 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 1, i64 2), align 8
272   %7 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 1, i64 3), align 4
273   %8 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 2, i64 0), align 16
274   %9 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 2, i64 1), align 4
275   %10 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 2, i64 2), align 8
276   %11 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 2, i64 3), align 4
277   %12 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 3, i64 0), align 16
278   %13 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 3, i64 1), align 4
279   %14 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 3, i64 2), align 8
280   %15 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 3, i64 3), align 4
281   %16 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 4, i64 0), align 16
282   %17 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 4, i64 1), align 4
283   %18 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 4, i64 2), align 8
284   %19 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 4, i64 3), align 4
285   %20 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 5, i64 0), align 16
286   %21 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 5, i64 1), align 4
287   %22 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 5, i64 2), align 8
288   %23 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 5, i64 3), align 4
289   %24 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 6, i64 0), align 16
290   %25 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 6, i64 1), align 4
291   %26 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 6, i64 2), align 8
292   %27 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 6, i64 3), align 4
293   %28 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 7, i64 0), align 16
294   %29 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 7, i64 1), align 4
295   %30 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 7, i64 2), align 8
296   %31 = load i32, i32* getelementptr inbounds ([8 x [4 x i32]], [8 x [4 x i32]]* @k, i64 0, i64 7, i64 3), align 4
297   br label %for.cond
299 for.cond:                                         ; preds = %for.cond, %entry
300   %indvars.iv = phi i64 [ %indvars.iv.next, %for.cond ], [ 0, %entry ]
301   %b.0 = phi i32 [ %spec.select8.3.7, %for.cond ], [ undef, %entry ]
302   %32 = trunc i64 %indvars.iv to i32
303   %33 = add i32 %32, -183
304   %sub = sub i32 %33, %0
305   %34 = icmp slt i32 %sub, 0
306   %neg = sub nsw i32 0, %sub
307   %35 = select i1 %34, i32 %neg, i32 %sub
308   %cmp12 = icmp slt i32 %35, %b.0
309   %spec.select8 = select i1 %cmp12, i32 %35, i32 %b.0
310   %sub.1 = sub i32 %33, %1
311   %36 = icmp slt i32 %sub.1, 0
312   %neg.1 = sub nsw i32 0, %sub.1
313   %37 = select i1 %36, i32 %neg.1, i32 %sub.1
314   %cmp12.1 = icmp slt i32 %37, %spec.select8
315   %spec.select8.1 = select i1 %cmp12.1, i32 %37, i32 %spec.select8
316   %sub.2 = sub i32 %33, %2
317   %38 = icmp slt i32 %sub.2, 0
318   %neg.2 = sub nsw i32 0, %sub.2
319   %39 = select i1 %38, i32 %neg.2, i32 %sub.2
320   %cmp12.2 = icmp slt i32 %39, %spec.select8.1
321   %spec.select8.2 = select i1 %cmp12.2, i32 %39, i32 %spec.select8.1
322   %sub.3 = sub i32 %33, %3
323   %40 = icmp slt i32 %sub.3, 0
324   %neg.3 = sub nsw i32 0, %sub.3
325   %41 = select i1 %40, i32 %neg.3, i32 %sub.3
326   %cmp12.3 = icmp slt i32 %41, %spec.select8.2
327   %spec.select8.3 = select i1 %cmp12.3, i32 %41, i32 %spec.select8.2
328   %sub.116 = sub i32 %33, %4
329   %42 = icmp slt i32 %sub.116, 0
330   %neg.117 = sub nsw i32 0, %sub.116
331   %43 = select i1 %42, i32 %neg.117, i32 %sub.116
332   %cmp12.118 = icmp slt i32 %43, %spec.select8.3
333   %spec.select8.120 = select i1 %cmp12.118, i32 %43, i32 %spec.select8.3
334   %sub.1.1 = sub i32 %33, %5
335   %44 = icmp slt i32 %sub.1.1, 0
336   %neg.1.1 = sub nsw i32 0, %sub.1.1
337   %45 = select i1 %44, i32 %neg.1.1, i32 %sub.1.1
338   %cmp12.1.1 = icmp slt i32 %45, %spec.select8.120
339   %narrow = or i1 %cmp12.1.1, %cmp12.118
340   %spec.select8.1.1 = select i1 %cmp12.1.1, i32 %45, i32 %spec.select8.120
341   %sub.2.1 = sub i32 %33, %6
342   %46 = icmp slt i32 %sub.2.1, 0
343   %neg.2.1 = sub nsw i32 0, %sub.2.1
344   %47 = select i1 %46, i32 %neg.2.1, i32 %sub.2.1
345   %cmp12.2.1 = icmp slt i32 %47, %spec.select8.1.1
346   %narrow34 = or i1 %cmp12.2.1, %narrow
347   %spec.select8.2.1 = select i1 %cmp12.2.1, i32 %47, i32 %spec.select8.1.1
348   %sub.3.1 = sub i32 %33, %7
349   %48 = icmp slt i32 %sub.3.1, 0
350   %neg.3.1 = sub nsw i32 0, %sub.3.1
351   %49 = select i1 %48, i32 %neg.3.1, i32 %sub.3.1
352   %cmp12.3.1 = icmp slt i32 %49, %spec.select8.2.1
353   %narrow35 = or i1 %cmp12.3.1, %narrow34
354   %spec.select.3.1 = zext i1 %narrow35 to i32
355   %spec.select8.3.1 = select i1 %cmp12.3.1, i32 %49, i32 %spec.select8.2.1
356   %sub.222 = sub i32 %33, %8
357   %50 = icmp slt i32 %sub.222, 0
358   %neg.223 = sub nsw i32 0, %sub.222
359   %51 = select i1 %50, i32 %neg.223, i32 %sub.222
360   %cmp12.224 = icmp slt i32 %51, %spec.select8.3.1
361   %spec.select8.226 = select i1 %cmp12.224, i32 %51, i32 %spec.select8.3.1
362   %sub.1.2 = sub i32 %33, %9
363   %52 = icmp slt i32 %sub.1.2, 0
364   %neg.1.2 = sub nsw i32 0, %sub.1.2
365   %53 = select i1 %52, i32 %neg.1.2, i32 %sub.1.2
366   %cmp12.1.2 = icmp slt i32 %53, %spec.select8.226
367   %54 = or i1 %cmp12.1.2, %cmp12.224
368   %spec.select8.1.2 = select i1 %cmp12.1.2, i32 %53, i32 %spec.select8.226
369   %sub.2.2 = sub i32 %33, %10
370   %55 = icmp slt i32 %sub.2.2, 0
371   %neg.2.2 = sub nsw i32 0, %sub.2.2
372   %56 = select i1 %55, i32 %neg.2.2, i32 %sub.2.2
373   %cmp12.2.2 = icmp slt i32 %56, %spec.select8.1.2
374   %57 = or i1 %cmp12.2.2, %54
375   %spec.select8.2.2 = select i1 %cmp12.2.2, i32 %56, i32 %spec.select8.1.2
376   %sub.3.2 = sub i32 %33, %11
377   %58 = icmp slt i32 %sub.3.2, 0
378   %neg.3.2 = sub nsw i32 0, %sub.3.2
379   %59 = select i1 %58, i32 %neg.3.2, i32 %sub.3.2
380   %cmp12.3.2 = icmp slt i32 %59, %spec.select8.2.2
381   %60 = or i1 %cmp12.3.2, %57
382   %spec.select.3.2 = select i1 %60, i32 2, i32 %spec.select.3.1
383   %spec.select8.3.2 = select i1 %cmp12.3.2, i32 %59, i32 %spec.select8.2.2
384   %sub.328 = sub i32 %33, %12
385   %61 = icmp slt i32 %sub.328, 0
386   %neg.329 = sub nsw i32 0, %sub.328
387   %62 = select i1 %61, i32 %neg.329, i32 %sub.328
388   %cmp12.330 = icmp slt i32 %62, %spec.select8.3.2
389   %spec.select8.332 = select i1 %cmp12.330, i32 %62, i32 %spec.select8.3.2
390   %sub.1.3 = sub i32 %33, %13
391   %63 = icmp slt i32 %sub.1.3, 0
392   %neg.1.3 = sub nsw i32 0, %sub.1.3
393   %64 = select i1 %63, i32 %neg.1.3, i32 %sub.1.3
394   %cmp12.1.3 = icmp slt i32 %64, %spec.select8.332
395   %65 = or i1 %cmp12.1.3, %cmp12.330
396   %spec.select8.1.3 = select i1 %cmp12.1.3, i32 %64, i32 %spec.select8.332
397   %sub.2.3 = sub i32 %33, %14
398   %66 = icmp slt i32 %sub.2.3, 0
399   %neg.2.3 = sub nsw i32 0, %sub.2.3
400   %67 = select i1 %66, i32 %neg.2.3, i32 %sub.2.3
401   %cmp12.2.3 = icmp slt i32 %67, %spec.select8.1.3
402   %68 = or i1 %cmp12.2.3, %65
403   %spec.select8.2.3 = select i1 %cmp12.2.3, i32 %67, i32 %spec.select8.1.3
404   %sub.3.3 = sub i32 %33, %15
405   %69 = icmp slt i32 %sub.3.3, 0
406   %neg.3.3 = sub nsw i32 0, %sub.3.3
407   %70 = select i1 %69, i32 %neg.3.3, i32 %sub.3.3
408   %cmp12.3.3 = icmp slt i32 %70, %spec.select8.2.3
409   %71 = or i1 %cmp12.3.3, %68
410   %spec.select.3.3 = select i1 %71, i32 3, i32 %spec.select.3.2
411   %spec.select8.3.3 = select i1 %cmp12.3.3, i32 %70, i32 %spec.select8.2.3
412   %sub.4 = sub i32 %33, %16
413   %72 = icmp slt i32 %sub.4, 0
414   %neg.4 = sub nsw i32 0, %sub.4
415   %73 = select i1 %72, i32 %neg.4, i32 %sub.4
416   %cmp12.4 = icmp slt i32 %73, %spec.select8.3.3
417   %spec.select8.4 = select i1 %cmp12.4, i32 %73, i32 %spec.select8.3.3
418   %sub.1.4 = sub i32 %33, %17
419   %74 = icmp slt i32 %sub.1.4, 0
420   %neg.1.4 = sub nsw i32 0, %sub.1.4
421   %75 = select i1 %74, i32 %neg.1.4, i32 %sub.1.4
422   %cmp12.1.4 = icmp slt i32 %75, %spec.select8.4
423   %76 = or i1 %cmp12.1.4, %cmp12.4
424   %spec.select8.1.4 = select i1 %cmp12.1.4, i32 %75, i32 %spec.select8.4
425   %sub.2.4 = sub i32 %33, %18
426   %77 = icmp slt i32 %sub.2.4, 0
427   %neg.2.4 = sub nsw i32 0, %sub.2.4
428   %78 = select i1 %77, i32 %neg.2.4, i32 %sub.2.4
429   %cmp12.2.4 = icmp slt i32 %78, %spec.select8.1.4
430   %79 = or i1 %cmp12.2.4, %76
431   %spec.select8.2.4 = select i1 %cmp12.2.4, i32 %78, i32 %spec.select8.1.4
432   %sub.3.4 = sub i32 %33, %19
433   %80 = icmp slt i32 %sub.3.4, 0
434   %neg.3.4 = sub nsw i32 0, %sub.3.4
435   %81 = select i1 %80, i32 %neg.3.4, i32 %sub.3.4
436   %cmp12.3.4 = icmp slt i32 %81, %spec.select8.2.4
437   %82 = or i1 %cmp12.3.4, %79
438   %spec.select.3.4 = select i1 %82, i32 4, i32 %spec.select.3.3
439   %spec.select8.3.4 = select i1 %cmp12.3.4, i32 %81, i32 %spec.select8.2.4
440   %sub.5 = sub i32 %33, %20
441   %83 = icmp slt i32 %sub.5, 0
442   %neg.5 = sub nsw i32 0, %sub.5
443   %84 = select i1 %83, i32 %neg.5, i32 %sub.5
444   %cmp12.5 = icmp slt i32 %84, %spec.select8.3.4
445   %spec.select8.5 = select i1 %cmp12.5, i32 %84, i32 %spec.select8.3.4
446   %sub.1.5 = sub i32 %33, %21
447   %85 = icmp slt i32 %sub.1.5, 0
448   %neg.1.5 = sub nsw i32 0, %sub.1.5
449   %86 = select i1 %85, i32 %neg.1.5, i32 %sub.1.5
450   %cmp12.1.5 = icmp slt i32 %86, %spec.select8.5
451   %87 = or i1 %cmp12.1.5, %cmp12.5
452   %spec.select8.1.5 = select i1 %cmp12.1.5, i32 %86, i32 %spec.select8.5
453   %sub.2.5 = sub i32 %33, %22
454   %88 = icmp slt i32 %sub.2.5, 0
455   %neg.2.5 = sub nsw i32 0, %sub.2.5
456   %89 = select i1 %88, i32 %neg.2.5, i32 %sub.2.5
457   %cmp12.2.5 = icmp slt i32 %89, %spec.select8.1.5
458   %90 = or i1 %cmp12.2.5, %87
459   %spec.select8.2.5 = select i1 %cmp12.2.5, i32 %89, i32 %spec.select8.1.5
460   %sub.3.5 = sub i32 %33, %23
461   %91 = icmp slt i32 %sub.3.5, 0
462   %neg.3.5 = sub nsw i32 0, %sub.3.5
463   %92 = select i1 %91, i32 %neg.3.5, i32 %sub.3.5
464   %cmp12.3.5 = icmp slt i32 %92, %spec.select8.2.5
465   %93 = or i1 %cmp12.3.5, %90
466   %spec.select.3.5 = select i1 %93, i32 5, i32 %spec.select.3.4
467   %spec.select8.3.5 = select i1 %cmp12.3.5, i32 %92, i32 %spec.select8.2.5
468   %sub.6 = sub i32 %33, %24
469   %94 = icmp slt i32 %sub.6, 0
470   %neg.6 = sub nsw i32 0, %sub.6
471   %95 = select i1 %94, i32 %neg.6, i32 %sub.6
472   %cmp12.6 = icmp slt i32 %95, %spec.select8.3.5
473   %spec.select8.6 = select i1 %cmp12.6, i32 %95, i32 %spec.select8.3.5
474   %sub.1.6 = sub i32 %33, %25
475   %96 = icmp slt i32 %sub.1.6, 0
476   %neg.1.6 = sub nsw i32 0, %sub.1.6
477   %97 = select i1 %96, i32 %neg.1.6, i32 %sub.1.6
478   %cmp12.1.6 = icmp slt i32 %97, %spec.select8.6
479   %98 = or i1 %cmp12.1.6, %cmp12.6
480   %spec.select8.1.6 = select i1 %cmp12.1.6, i32 %97, i32 %spec.select8.6
481   %sub.2.6 = sub i32 %33, %26
482   %99 = icmp slt i32 %sub.2.6, 0
483   %neg.2.6 = sub nsw i32 0, %sub.2.6
484   %100 = select i1 %99, i32 %neg.2.6, i32 %sub.2.6
485   %cmp12.2.6 = icmp slt i32 %100, %spec.select8.1.6
486   %101 = or i1 %cmp12.2.6, %98
487   %spec.select8.2.6 = select i1 %cmp12.2.6, i32 %100, i32 %spec.select8.1.6
488   %sub.3.6 = sub i32 %33, %27
489   %102 = icmp slt i32 %sub.3.6, 0
490   %neg.3.6 = sub nsw i32 0, %sub.3.6
491   %103 = select i1 %102, i32 %neg.3.6, i32 %sub.3.6
492   %cmp12.3.6 = icmp slt i32 %103, %spec.select8.2.6
493   %104 = or i1 %cmp12.3.6, %101
494   %spec.select.3.6 = select i1 %104, i32 6, i32 %spec.select.3.5
495   %spec.select8.3.6 = select i1 %cmp12.3.6, i32 %103, i32 %spec.select8.2.6
496   %sub.7 = sub i32 %33, %28
497   %105 = icmp slt i32 %sub.7, 0
498   %neg.7 = sub nsw i32 0, %sub.7
499   %106 = select i1 %105, i32 %neg.7, i32 %sub.7
500   %cmp12.7 = icmp slt i32 %106, %spec.select8.3.6
501   %spec.select8.7 = select i1 %cmp12.7, i32 %106, i32 %spec.select8.3.6
502   %sub.1.7 = sub i32 %33, %29
503   %107 = icmp slt i32 %sub.1.7, 0
504   %neg.1.7 = sub nsw i32 0, %sub.1.7
505   %108 = select i1 %107, i32 %neg.1.7, i32 %sub.1.7
506   %cmp12.1.7 = icmp slt i32 %108, %spec.select8.7
507   %109 = or i1 %cmp12.1.7, %cmp12.7
508   %spec.select8.1.7 = select i1 %cmp12.1.7, i32 %108, i32 %spec.select8.7
509   %sub.2.7 = sub i32 %33, %30
510   %110 = icmp slt i32 %sub.2.7, 0
511   %neg.2.7 = sub nsw i32 0, %sub.2.7
512   %111 = select i1 %110, i32 %neg.2.7, i32 %sub.2.7
513   %cmp12.2.7 = icmp slt i32 %111, %spec.select8.1.7
514   %112 = or i1 %cmp12.2.7, %109
515   %spec.select8.2.7 = select i1 %cmp12.2.7, i32 %111, i32 %spec.select8.1.7
516   %sub.3.7 = sub i32 %33, %31
517   %113 = icmp slt i32 %sub.3.7, 0
518   %neg.3.7 = sub nsw i32 0, %sub.3.7
519   %114 = select i1 %113, i32 %neg.3.7, i32 %sub.3.7
520   %cmp12.3.7 = icmp slt i32 %114, %spec.select8.2.7
521   %115 = or i1 %cmp12.3.7, %112
522   %spec.select.3.7 = select i1 %115, i32 7, i32 %spec.select.3.6
523   %spec.select8.3.7 = select i1 %cmp12.3.7, i32 %114, i32 %spec.select8.2.7
524   %k = getelementptr inbounds [366 x i32], [366 x i32]* @l, i64 0, i64 %indvars.iv
525   store i32 %spec.select.3.7, i32* %k, align 4
526   %indvars.iv.next = add i64 %indvars.iv, 1
527   br label %for.cond