Skip to content

Commit e31cbc4

Browse files
committed
[CVP] Add tests for adding nneg flag to uitofp and converting sitofp -> uitofp nneg; NFC
1 parent d3e77f5 commit e31cbc4

File tree

2 files changed

+197
-0
lines changed

2 files changed

+197
-0
lines changed
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2+
; RUN: opt < %s -passes=correlated-propagation -S | FileCheck %s
3+
4+
declare void @use.f32(float)
5+
6+
define void @test1(i32 %n) {
7+
; CHECK-LABEL: @test1(
8+
; CHECK-NEXT: entry:
9+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[N:%.*]], -1
10+
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
11+
; CHECK: bb:
12+
; CHECK-NEXT: [[EXT_WIDE:%.*]] = sitofp i32 [[N]] to float
13+
; CHECK-NEXT: call void @use.f32(float [[EXT_WIDE]])
14+
; CHECK-NEXT: br label [[EXIT]]
15+
; CHECK: exit:
16+
; CHECK-NEXT: ret void
17+
;
18+
entry:
19+
%cmp = icmp sgt i32 %n, -1
20+
br i1 %cmp, label %bb, label %exit
21+
22+
bb:
23+
%ext.wide = sitofp i32 %n to float
24+
call void @use.f32(float %ext.wide)
25+
br label %exit
26+
27+
exit:
28+
ret void
29+
}
30+
31+
32+
define void @test2_fail(i32 %n) {
33+
; CHECK-LABEL: @test2_fail(
34+
; CHECK-NEXT: entry:
35+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[N:%.*]], -2
36+
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
37+
; CHECK: bb:
38+
; CHECK-NEXT: [[EXT_WIDE:%.*]] = sitofp i32 [[N]] to float
39+
; CHECK-NEXT: call void @use.f32(float [[EXT_WIDE]])
40+
; CHECK-NEXT: br label [[EXIT]]
41+
; CHECK: exit:
42+
; CHECK-NEXT: ret void
43+
;
44+
entry:
45+
%cmp = icmp sgt i32 %n, -2
46+
br i1 %cmp, label %bb, label %exit
47+
48+
bb:
49+
%ext.wide = sitofp i32 %n to float
50+
call void @use.f32(float %ext.wide)
51+
br label %exit
52+
53+
exit:
54+
ret void
55+
}
56+
57+
define float @may_including_undef(i1 %c.1, i1 %c.2) {
58+
; CHECK-LABEL: @may_including_undef(
59+
; CHECK-NEXT: br i1 [[C_1:%.*]], label [[TRUE_1:%.*]], label [[FALSE:%.*]]
60+
; CHECK: true.1:
61+
; CHECK-NEXT: br i1 [[C_2:%.*]], label [[TRUE_2:%.*]], label [[EXIT:%.*]]
62+
; CHECK: true.2:
63+
; CHECK-NEXT: br label [[EXIT]]
64+
; CHECK: false:
65+
; CHECK-NEXT: br label [[EXIT]]
66+
; CHECK: exit:
67+
; CHECK-NEXT: [[P:%.*]] = phi i32 [ 0, [[TRUE_1]] ], [ 1, [[TRUE_2]] ], [ undef, [[FALSE]] ]
68+
; CHECK-NEXT: [[EXT:%.*]] = sitofp i32 [[P]] to float
69+
; CHECK-NEXT: ret float [[EXT]]
70+
;
71+
br i1 %c.1, label %true.1, label %false
72+
73+
true.1:
74+
br i1 %c.2, label %true.2, label %exit
75+
76+
true.2:
77+
br label %exit
78+
79+
false:
80+
br label %exit
81+
82+
exit:
83+
%p = phi i32 [ 0, %true.1 ], [ 1, %true.2], [ undef, %false ]
84+
%ext = sitofp i32 %p to float
85+
ret float %ext
86+
}
87+
88+
define double @test_infer_at_use(i32 noundef %n) {
89+
; CHECK-LABEL: @test_infer_at_use(
90+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[N:%.*]], -1
91+
; CHECK-NEXT: [[EXT:%.*]] = sitofp i32 [[N]] to double
92+
; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[CMP]], double [[EXT]], double 0.000000e+00
93+
; CHECK-NEXT: ret double [[SELECT]]
94+
;
95+
%cmp = icmp sgt i32 %n, -1
96+
%ext = sitofp i32 %n to double
97+
%select = select i1 %cmp, double %ext, double 0.0
98+
ret double %select
99+
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2+
; RUN: opt < %s -passes=correlated-propagation -S | FileCheck %s
3+
4+
declare void @use.f32(float)
5+
6+
define void @test1(i32 %n) {
7+
; CHECK-LABEL: @test1(
8+
; CHECK-NEXT: entry:
9+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[N:%.*]], -1
10+
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
11+
; CHECK: bb:
12+
; CHECK-NEXT: [[EXT_WIDE:%.*]] = uitofp i32 [[N]] to float
13+
; CHECK-NEXT: call void @use.f32(float [[EXT_WIDE]])
14+
; CHECK-NEXT: br label [[EXIT]]
15+
; CHECK: exit:
16+
; CHECK-NEXT: ret void
17+
;
18+
entry:
19+
%cmp = icmp sgt i32 %n, -1
20+
br i1 %cmp, label %bb, label %exit
21+
22+
bb:
23+
%ext.wide = uitofp i32 %n to float
24+
call void @use.f32(float %ext.wide)
25+
br label %exit
26+
27+
exit:
28+
ret void
29+
}
30+
31+
define void @test2_fail(i32 %n) {
32+
; CHECK-LABEL: @test2_fail(
33+
; CHECK-NEXT: entry:
34+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[N:%.*]], -2
35+
; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
36+
; CHECK: bb:
37+
; CHECK-NEXT: [[EXT_WIDE:%.*]] = uitofp i32 [[N]] to float
38+
; CHECK-NEXT: call void @use.f32(float [[EXT_WIDE]])
39+
; CHECK-NEXT: br label [[EXIT]]
40+
; CHECK: exit:
41+
; CHECK-NEXT: ret void
42+
;
43+
entry:
44+
%cmp = icmp sgt i32 %n, -2
45+
br i1 %cmp, label %bb, label %exit
46+
47+
bb:
48+
%ext.wide = uitofp i32 %n to float
49+
call void @use.f32(float %ext.wide)
50+
br label %exit
51+
52+
exit:
53+
ret void
54+
}
55+
56+
define float @may_including_undef(i1 %c.1, i1 %c.2) {
57+
; CHECK-LABEL: @may_including_undef(
58+
; CHECK-NEXT: br i1 [[C_1:%.*]], label [[TRUE_1:%.*]], label [[FALSE:%.*]]
59+
; CHECK: true.1:
60+
; CHECK-NEXT: br i1 [[C_2:%.*]], label [[TRUE_2:%.*]], label [[EXIT:%.*]]
61+
; CHECK: true.2:
62+
; CHECK-NEXT: br label [[EXIT]]
63+
; CHECK: false:
64+
; CHECK-NEXT: br label [[EXIT]]
65+
; CHECK: exit:
66+
; CHECK-NEXT: [[P:%.*]] = phi i32 [ 0, [[TRUE_1]] ], [ 1, [[TRUE_2]] ], [ undef, [[FALSE]] ]
67+
; CHECK-NEXT: [[EXT:%.*]] = uitofp i32 [[P]] to float
68+
; CHECK-NEXT: ret float [[EXT]]
69+
;
70+
br i1 %c.1, label %true.1, label %false
71+
72+
true.1:
73+
br i1 %c.2, label %true.2, label %exit
74+
75+
true.2:
76+
br label %exit
77+
78+
false:
79+
br label %exit
80+
81+
exit:
82+
%p = phi i32 [ 0, %true.1 ], [ 1, %true.2], [ undef, %false ]
83+
%ext = uitofp i32 %p to float
84+
ret float %ext
85+
}
86+
87+
define double @test_infer_at_use(i32 noundef %n) {
88+
; CHECK-LABEL: @test_infer_at_use(
89+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[N:%.*]], -1
90+
; CHECK-NEXT: [[EXT:%.*]] = uitofp i32 [[N]] to double
91+
; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[CMP]], double [[EXT]], double 0.000000e+00
92+
; CHECK-NEXT: ret double [[SELECT]]
93+
;
94+
%cmp = icmp sgt i32 %n, -1
95+
%ext = uitofp i32 %n to double
96+
%select = select i1 %cmp, double %ext, double 0.0
97+
ret double %select
98+
}

0 commit comments

Comments
 (0)