@@ -21,6 +21,106 @@ exit:
21
21
ret i64 %res
22
22
}
23
23
24
+ define i64 @test_add (i1 %c ) {
25
+ ; CHECK-LABEL: @test_add(
26
+ ; CHECK-NEXT: entry:
27
+ ; CHECK-NEXT: br label [[LOOP:%.*]]
28
+ ; CHECK: loop:
29
+ ; CHECK-NEXT: br i1 [[C:%.*]], label [[EXIT:%.*]], label [[LOOP]]
30
+ ; CHECK: exit:
31
+ ; CHECK-NEXT: ret i64 0
32
+ ;
33
+ entry:
34
+ br label %loop
35
+ loop:
36
+ %iv = phi i64 [8 , %entry ], [%iv.next , %loop ]
37
+ %iv.next = add nuw i64 %iv , 4
38
+ br i1 %c , label %exit , label %loop
39
+ exit:
40
+ %res = and i64 %iv , 1
41
+ ret i64 %res
42
+ }
43
+
44
+ define i64 @test_sub (i1 %c ) {
45
+ ; CHECK-LABEL: @test_sub(
46
+ ; CHECK-NEXT: entry:
47
+ ; CHECK-NEXT: br label [[LOOP:%.*]]
48
+ ; CHECK: loop:
49
+ ; CHECK-NEXT: br i1 [[C:%.*]], label [[EXIT:%.*]], label [[LOOP]]
50
+ ; CHECK: exit:
51
+ ; CHECK-NEXT: ret i64 0
52
+ ;
53
+ entry:
54
+ br label %loop
55
+ loop:
56
+ %iv = phi i64 [8 , %entry ], [%iv.next , %loop ]
57
+ %iv.next = sub nuw i64 %iv , 4
58
+ br i1 %c , label %exit , label %loop
59
+ exit:
60
+ %res = and i64 %iv , 1
61
+ ret i64 %res
62
+ }
63
+
64
+ define i64 @test_mul (i1 %c ) {
65
+ ; CHECK-LABEL: @test_mul(
66
+ ; CHECK-NEXT: entry:
67
+ ; CHECK-NEXT: br label [[LOOP:%.*]]
68
+ ; CHECK: loop:
69
+ ; CHECK-NEXT: br i1 [[C:%.*]], label [[EXIT:%.*]], label [[LOOP]]
70
+ ; CHECK: exit:
71
+ ; CHECK-NEXT: ret i64 0
72
+ ;
73
+ entry:
74
+ br label %loop
75
+ loop:
76
+ %iv = phi i64 [8 , %entry ], [%iv.next , %loop ]
77
+ %iv.next = mul i64 %iv , 2
78
+ br i1 %c , label %exit , label %loop
79
+ exit:
80
+ %res = and i64 %iv , 2
81
+ ret i64 %res
82
+ }
83
+
84
+ define i64 @test_and (i1 %c ) {
85
+ ; CHECK-LABEL: @test_and(
86
+ ; CHECK-NEXT: entry:
87
+ ; CHECK-NEXT: br label [[LOOP:%.*]]
88
+ ; CHECK: loop:
89
+ ; CHECK-NEXT: br i1 [[C:%.*]], label [[EXIT:%.*]], label [[LOOP]]
90
+ ; CHECK: exit:
91
+ ; CHECK-NEXT: ret i64 2047
92
+ ;
93
+ entry:
94
+ br label %loop
95
+ loop:
96
+ %iv = phi i64 [1025 , %entry ], [%iv.next , %loop ]
97
+ %iv.next = and i64 %iv , 1024
98
+ br i1 %c , label %exit , label %loop
99
+ exit:
100
+ %res = or i64 %iv , 1023
101
+ ret i64 %res
102
+ }
103
+
104
+ define i64 @test_or (i1 %c ) {
105
+ ; CHECK-LABEL: @test_or(
106
+ ; CHECK-NEXT: entry:
107
+ ; CHECK-NEXT: br label [[LOOP:%.*]]
108
+ ; CHECK: loop:
109
+ ; CHECK-NEXT: br i1 [[C:%.*]], label [[EXIT:%.*]], label [[LOOP]]
110
+ ; CHECK: exit:
111
+ ; CHECK-NEXT: ret i64 2047
112
+ ;
113
+ entry:
114
+ br label %loop
115
+ loop:
116
+ %iv = phi i64 [1025 , %entry ], [%iv.next , %loop ]
117
+ %iv.next = or i64 %iv , 1024
118
+ br i1 %c , label %exit , label %loop
119
+ exit:
120
+ %res = or i64 %iv , 1023
121
+ ret i64 %res
122
+ }
123
+
24
124
define i64 @test_ashr_zeros (i1 %c ) {
25
125
; CHECK-LABEL: @test_ashr_zeros(
26
126
; CHECK-NEXT: entry:
0 commit comments