Skip to content

Commit b0c9bb7

Browse files
committed
[ValueTracking] Add pre-commit tests. NFC.
1 parent 69a661c commit b0c9bb7

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
2+
; RUN: opt -S -passes=instcombine < %s | FileCheck %s
3+
4+
define float @test_signbit_check(float %x, i1 %cond) {
5+
; CHECK-LABEL: define float @test_signbit_check(
6+
; CHECK-SAME: float [[X:%.*]], i1 [[COND:%.*]]) {
7+
; CHECK-NEXT: [[I32:%.*]] = bitcast float [[X]] to i32
8+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[I32]], 0
9+
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN1:%.*]], label [[IF_ELSE:%.*]]
10+
; CHECK: if.then1:
11+
; CHECK-NEXT: [[FNEG:%.*]] = fneg float [[X]]
12+
; CHECK-NEXT: br label [[IF_END:%.*]]
13+
; CHECK: if.else:
14+
; CHECK-NEXT: br i1 [[COND]], label [[IF_THEN2:%.*]], label [[IF_END]]
15+
; CHECK: if.then2:
16+
; CHECK-NEXT: br label [[IF_END]]
17+
; CHECK: if.end:
18+
; CHECK-NEXT: [[VALUE:%.*]] = phi float [ [[FNEG]], [[IF_THEN1]] ], [ [[X]], [[IF_THEN2]] ], [ [[X]], [[IF_ELSE]] ]
19+
; CHECK-NEXT: [[RET:%.*]] = call float @llvm.fabs.f32(float [[VALUE]])
20+
; CHECK-NEXT: ret float [[RET]]
21+
;
22+
%i32 = bitcast float %x to i32
23+
%cmp = icmp slt i32 %i32, 0
24+
br i1 %cmp, label %if.then1, label %if.else
25+
26+
if.then1:
27+
%fneg = fneg float %x
28+
br label %if.end
29+
30+
if.else:
31+
br i1 %cond, label %if.then2, label %if.end
32+
33+
if.then2:
34+
br label %if.end
35+
36+
if.end:
37+
%value = phi float [ %fneg, %if.then1 ], [ %x, %if.then2 ], [ %x, %if.else ]
38+
%ret = call float @llvm.fabs.f32(float %value)
39+
ret float %ret
40+
}
41+
42+
define float @test_signbit_check_fail(float %x, i1 %cond) {
43+
; CHECK-LABEL: define float @test_signbit_check_fail(
44+
; CHECK-SAME: float [[X:%.*]], i1 [[COND:%.*]]) {
45+
; CHECK-NEXT: [[I32:%.*]] = bitcast float [[X]] to i32
46+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[I32]], 0
47+
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN1:%.*]], label [[IF_ELSE:%.*]]
48+
; CHECK: if.then1:
49+
; CHECK-NEXT: [[FNEG:%.*]] = fneg float [[X]]
50+
; CHECK-NEXT: br label [[IF_END:%.*]]
51+
; CHECK: if.else:
52+
; CHECK-NEXT: br i1 [[COND]], label [[IF_THEN2:%.*]], label [[IF_END]]
53+
; CHECK: if.then2:
54+
; CHECK-NEXT: [[FNEG2:%.*]] = fneg float [[X]]
55+
; CHECK-NEXT: br label [[IF_END]]
56+
; CHECK: if.end:
57+
; CHECK-NEXT: [[VALUE:%.*]] = phi float [ [[FNEG]], [[IF_THEN1]] ], [ [[FNEG2]], [[IF_THEN2]] ], [ [[X]], [[IF_ELSE]] ]
58+
; CHECK-NEXT: [[RET:%.*]] = call float @llvm.fabs.f32(float [[VALUE]])
59+
; CHECK-NEXT: ret float [[RET]]
60+
;
61+
%i32 = bitcast float %x to i32
62+
%cmp = icmp slt i32 %i32, 0
63+
br i1 %cmp, label %if.then1, label %if.else
64+
65+
if.then1:
66+
%fneg = fneg float %x
67+
br label %if.end
68+
69+
if.else:
70+
br i1 %cond, label %if.then2, label %if.end
71+
72+
if.then2:
73+
%fneg2 = fneg float %x
74+
br label %if.end
75+
76+
if.end:
77+
%value = phi float [ %fneg, %if.then1 ], [ %fneg2, %if.then2 ], [ %x, %if.else ]
78+
%ret = call float @llvm.fabs.f32(float %value)
79+
ret float %ret
80+
}

0 commit comments

Comments
 (0)