@@ -126,6 +126,59 @@ exit:
126
126
ret void
127
127
}
128
128
129
+ define void @call_scalarized (ptr noalias %src , ptr noalias %dst , double %0 ) {
130
+ ; CHECK-LABEL: define void @call_scalarized(
131
+ ; CHECK-SAME: ptr noalias [[SRC:%.*]], ptr noalias [[DST:%.*]], double [[TMP0:%.*]]) {
132
+ ; CHECK-NEXT: [[ENTRY:.*]]:
133
+ ; CHECK-NEXT: br label %[[LOOP_HEADER:.*]]
134
+ ; CHECK: [[LOOP_HEADER]]:
135
+ ; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 100, %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP_LATCH:.*]] ]
136
+ ; CHECK-NEXT: [[IV_NEXT]] = add i64 [[IV]], -1
137
+ ; CHECK-NEXT: [[GEP_SRC:%.*]] = getelementptr double, ptr [[SRC]], i64 [[IV_NEXT]]
138
+ ; CHECK-NEXT: [[L:%.*]] = load double, ptr [[GEP_SRC]], align 8
139
+ ; CHECK-NEXT: [[CMP295:%.*]] = fcmp ugt double [[TMP0]], 0.000000e+00
140
+ ; CHECK-NEXT: [[CMP299:%.*]] = fcmp ugt double [[L]], 0.000000e+00
141
+ ; CHECK-NEXT: [[OR_COND:%.*]] = or i1 [[CMP295]], [[CMP299]]
142
+ ; CHECK-NEXT: br i1 [[OR_COND]], label %[[LOOP_LATCH]], label %[[THEN:.*]]
143
+ ; CHECK: [[THEN]]:
144
+ ; CHECK-NEXT: [[SQRT:%.*]] = call double @llvm.sqrt.f64(double [[L]])
145
+ ; CHECK-NEXT: [[GEP_DST:%.*]] = getelementptr double, ptr [[DST]], i64 [[IV_NEXT]]
146
+ ; CHECK-NEXT: store double [[SQRT]], ptr [[GEP_DST]], align 8
147
+ ; CHECK-NEXT: br label %[[LOOP_LATCH]]
148
+ ; CHECK: [[LOOP_LATCH]]:
149
+ ; CHECK-NEXT: [[TOBOOL_NOT:%.*]] = icmp eq i64 [[IV_NEXT]], 0
150
+ ; CHECK-NEXT: br i1 [[TOBOOL_NOT]], label %[[EXIT:.*]], label %[[LOOP_HEADER]]
151
+ ; CHECK: [[EXIT]]:
152
+ ; CHECK-NEXT: ret void
153
+ ;
154
+ entry:
155
+ br label %loop.header
156
+
157
+ loop.header:
158
+ %iv = phi i64 [ 100 , %entry ], [ %iv.next , %loop.latch ]
159
+ %iv.next = add i64 %iv , -1
160
+ %gep.src = getelementptr double , ptr %src , i64 %iv.next
161
+ %l = load double , ptr %gep.src , align 8
162
+ %cmp295 = fcmp ugt double %0 , 0 .000000e+00
163
+ %cmp299 = fcmp ugt double %l , 0 .000000e+00
164
+ %or.cond = or i1 %cmp295 , %cmp299
165
+ br i1 %or.cond , label %loop.latch , label %then
166
+
167
+ then:
168
+ %sqrt = call double @llvm.sqrt.f64 (double %l )
169
+ %gep.dst = getelementptr double , ptr %dst , i64 %iv.next
170
+ store double %sqrt , ptr %gep.dst , align 8
171
+ br label %loop.latch
172
+
173
+ loop.latch:
174
+ %tobool.not = icmp eq i64 %iv.next , 0
175
+ br i1 %tobool.not , label %exit , label %loop.header
176
+
177
+ exit:
178
+ ret void
179
+ }
180
+
181
+ declare double @llvm.sqrt.f64 (double ) #0
129
182
declare double @llvm.powi.f64.i32 (double , i32 )
130
183
declare i64 @llvm.fshl.i64 (i64 , i64 , i64 )
131
184
;.
0 commit comments