Skip to content

Commit 398c51a

Browse files
committed
[ValueTracking] Add pre-commit tests. NFC.
1 parent bfc0b7c commit 398c51a

File tree

1 file changed

+116
-0
lines changed

1 file changed

+116
-0
lines changed

llvm/test/Transforms/InstCombine/fpclass-from-dom-cond.ll

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,3 +320,119 @@ if.else:
320320
%ret = call i1 @llvm.is.fpclass.f32(float %x, i32 783)
321321
ret i1 %ret
322322
}
323+
324+
define float @test_signbit_check(float %x, i1 %cond) {
325+
; CHECK-LABEL: define float @test_signbit_check(
326+
; CHECK-SAME: float [[X:%.*]], i1 [[COND:%.*]]) {
327+
; CHECK-NEXT: [[I32:%.*]] = bitcast float [[X]] to i32
328+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[I32]], 0
329+
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN1:%.*]], label [[IF_ELSE:%.*]]
330+
; CHECK: if.then1:
331+
; CHECK-NEXT: [[FNEG:%.*]] = fneg float [[X]]
332+
; CHECK-NEXT: br label [[IF_END:%.*]]
333+
; CHECK: if.else:
334+
; CHECK-NEXT: br i1 [[COND]], label [[IF_THEN2:%.*]], label [[IF_END]]
335+
; CHECK: if.then2:
336+
; CHECK-NEXT: br label [[IF_END]]
337+
; CHECK: if.end:
338+
; CHECK-NEXT: [[VALUE:%.*]] = phi float [ [[FNEG]], [[IF_THEN1]] ], [ [[X]], [[IF_THEN2]] ], [ [[X]], [[IF_ELSE]] ]
339+
; CHECK-NEXT: [[RET:%.*]] = call float @llvm.fabs.f32(float [[VALUE]])
340+
; CHECK-NEXT: ret float [[RET]]
341+
;
342+
%i32 = bitcast float %x to i32
343+
%cmp = icmp slt i32 %i32, 0
344+
br i1 %cmp, label %if.then1, label %if.else
345+
346+
if.then1:
347+
%fneg = fneg float %x
348+
br label %if.end
349+
350+
if.else:
351+
br i1 %cond, label %if.then2, label %if.end
352+
353+
if.then2:
354+
br label %if.end
355+
356+
if.end:
357+
%value = phi float [ %fneg, %if.then1 ], [ %x, %if.then2 ], [ %x, %if.else ]
358+
%ret = call float @llvm.fabs.f32(float %value)
359+
ret float %ret
360+
}
361+
362+
define float @test_signbit_check_fail(float %x, i1 %cond) {
363+
; CHECK-LABEL: define float @test_signbit_check_fail(
364+
; CHECK-SAME: float [[X:%.*]], i1 [[COND:%.*]]) {
365+
; CHECK-NEXT: [[I32:%.*]] = bitcast float [[X]] to i32
366+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[I32]], 0
367+
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN1:%.*]], label [[IF_ELSE:%.*]]
368+
; CHECK: if.then1:
369+
; CHECK-NEXT: [[FNEG:%.*]] = fneg float [[X]]
370+
; CHECK-NEXT: br label [[IF_END:%.*]]
371+
; CHECK: if.else:
372+
; CHECK-NEXT: br i1 [[COND]], label [[IF_THEN2:%.*]], label [[IF_END]]
373+
; CHECK: if.then2:
374+
; CHECK-NEXT: [[FNEG2:%.*]] = fneg float [[X]]
375+
; CHECK-NEXT: br label [[IF_END]]
376+
; CHECK: if.end:
377+
; CHECK-NEXT: [[VALUE:%.*]] = phi float [ [[FNEG]], [[IF_THEN1]] ], [ [[FNEG2]], [[IF_THEN2]] ], [ [[X]], [[IF_ELSE]] ]
378+
; CHECK-NEXT: [[RET:%.*]] = call float @llvm.fabs.f32(float [[VALUE]])
379+
; CHECK-NEXT: ret float [[RET]]
380+
;
381+
%i32 = bitcast float %x to i32
382+
%cmp = icmp slt i32 %i32, 0
383+
br i1 %cmp, label %if.then1, label %if.else
384+
385+
if.then1:
386+
%fneg = fneg float %x
387+
br label %if.end
388+
389+
if.else:
390+
br i1 %cond, label %if.then2, label %if.end
391+
392+
if.then2:
393+
%fneg2 = fneg float %x
394+
br label %if.end
395+
396+
if.end:
397+
%value = phi float [ %fneg, %if.then1 ], [ %fneg2, %if.then2 ], [ %x, %if.else ]
398+
%ret = call float @llvm.fabs.f32(float %value)
399+
ret float %ret
400+
}
401+
402+
define <2 x float> @test_signbit_check_wrong_type(<2 x float> %x, i1 %cond) {
403+
; CHECK-LABEL: define <2 x float> @test_signbit_check_wrong_type(
404+
; CHECK-SAME: <2 x float> [[X:%.*]], i1 [[COND:%.*]]) {
405+
; CHECK-NEXT: [[I32:%.*]] = bitcast <2 x float> [[X]] to i64
406+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i64 [[I32]], 0
407+
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN1:%.*]], label [[IF_ELSE:%.*]]
408+
; CHECK: if.then1:
409+
; CHECK-NEXT: [[FNEG:%.*]] = fneg <2 x float> [[X]]
410+
; CHECK-NEXT: br label [[IF_END:%.*]]
411+
; CHECK: if.else:
412+
; CHECK-NEXT: br i1 [[COND]], label [[IF_THEN2:%.*]], label [[IF_END]]
413+
; CHECK: if.then2:
414+
; CHECK-NEXT: br label [[IF_END]]
415+
; CHECK: if.end:
416+
; CHECK-NEXT: [[VALUE:%.*]] = phi <2 x float> [ [[FNEG]], [[IF_THEN1]] ], [ [[X]], [[IF_THEN2]] ], [ [[X]], [[IF_ELSE]] ]
417+
; CHECK-NEXT: [[RET:%.*]] = call <2 x float> @llvm.fabs.v2f32(<2 x float> [[VALUE]])
418+
; CHECK-NEXT: ret <2 x float> [[RET]]
419+
;
420+
%i32 = bitcast <2 x float> %x to i64
421+
%cmp = icmp slt i64 %i32, 0
422+
br i1 %cmp, label %if.then1, label %if.else
423+
424+
if.then1:
425+
%fneg = fneg <2 x float> %x
426+
br label %if.end
427+
428+
if.else:
429+
br i1 %cond, label %if.then2, label %if.end
430+
431+
if.then2:
432+
br label %if.end
433+
434+
if.end:
435+
%value = phi <2 x float> [ %fneg, %if.then1 ], [ %x, %if.then2 ], [ %x, %if.else ]
436+
%ret = call <2 x float> @llvm.fabs.v2f32(<2 x float> %value)
437+
ret <2 x float> %ret
438+
}

0 commit comments

Comments
 (0)