@@ -44,3 +44,45 @@ define i8 @qux(i8 %a) {
44
44
%t3 = urem i8 %a , 2
45
45
ret i8 %t3
46
46
}
47
+
48
+ define i32 @test_and_not (i32 %arg ) {
49
+ ; CHECK-LABEL: 'test_and_not'
50
+ ; CHECK-NEXT: Classifying expressions for: @test_and_not
51
+ ; CHECK-NEXT: %andn = and i32 %arg, -8
52
+ ; CHECK-NEXT: --> (8 * (%arg /u 8))<nuw> U: [0,-7) S: [-2147483648,2147483641)
53
+ ; CHECK-NEXT: Determining loop execution counts for: @test_and_not
54
+ ;
55
+ %andn = and i32 %arg , -8
56
+ ret i32 %andn
57
+ }
58
+
59
+ define i32 @test_sub_urem (i32 %arg ) {
60
+ ; CHECK-LABEL: 'test_sub_urem'
61
+ ; CHECK-NEXT: Classifying expressions for: @test_sub_urem
62
+ ; CHECK-NEXT: %urem = urem i32 %arg, 8
63
+ ; CHECK-NEXT: --> (zext i3 (trunc i32 %arg to i3) to i32) U: [0,8) S: [0,8)
64
+ ; CHECK-NEXT: %sub = sub i32 %arg, %urem
65
+ ; CHECK-NEXT: --> ((-1 * (zext i3 (trunc i32 %arg to i3) to i32))<nsw> + %arg) U: full-set S: full-set
66
+ ; CHECK-NEXT: Determining loop execution counts for: @test_sub_urem
67
+ ;
68
+ %urem = urem i32 %arg , 8
69
+ %sub = sub i32 %arg , %urem
70
+ ret i32 %sub
71
+ }
72
+
73
+ define i32 @test_trunc_zext (i32 %arg ) {
74
+ ; CHECK-LABEL: 'test_trunc_zext'
75
+ ; CHECK-NEXT: Classifying expressions for: @test_trunc_zext
76
+ ; CHECK-NEXT: %trunc = trunc i32 %arg to i3
77
+ ; CHECK-NEXT: --> (trunc i32 %arg to i3) U: full-set S: full-set
78
+ ; CHECK-NEXT: %zext = zext i3 %trunc to i32
79
+ ; CHECK-NEXT: --> (zext i3 (trunc i32 %arg to i3) to i32) U: [0,8) S: [0,8)
80
+ ; CHECK-NEXT: %sub = sub i32 %arg, %zext
81
+ ; CHECK-NEXT: --> ((-1 * (zext i3 (trunc i32 %arg to i3) to i32))<nsw> + %arg) U: full-set S: full-set
82
+ ; CHECK-NEXT: Determining loop execution counts for: @test_trunc_zext
83
+ ;
84
+ %trunc = trunc i32 %arg to i3
85
+ %zext = zext i3 %trunc to i32
86
+ %sub = sub i32 %arg , %zext
87
+ ret i32 %sub
88
+ }
0 commit comments