@@ -6,15 +6,49 @@ define i8 @or-of-constant-with-no-common-bits-set(i8 %x, i8 %y) {
6
6
; CHECK-NEXT: Classifying expressions for: @or-of-constant-with-no-common-bits-set
7
7
; CHECK-NEXT: %t0 = shl i8 %x, 2
8
8
; CHECK-NEXT: --> (4 * %x) U: [0,-3) S: [-128,125)
9
- ; CHECK-NEXT: %r = or i8 %t0, 3
9
+ ; CHECK-NEXT: %r = or disjoint i8 %t0, 3
10
10
; CHECK-NEXT: --> (3 + (4 * %x))<nuw><nsw> U: [3,0) S: [-125,-128)
11
11
; CHECK-NEXT: Determining loop execution counts for: @or-of-constant-with-no-common-bits-set
12
12
;
13
13
%t0 = shl i8 %x , 2
14
- %r = or i8 %t0 , 3
14
+ %r = or disjoint i8 %t0 , 3
15
15
ret i8 %r
16
16
}
17
17
18
+ define i8 @or-disjoint (i8 %x , i8 %y ) {
19
+ ; CHECK-LABEL: 'or-disjoint'
20
+ ; CHECK-NEXT: Classifying expressions for: @or-disjoint
21
+ ; CHECK-NEXT: %or = or disjoint i8 %x, %y
22
+ ; CHECK-NEXT: --> (%x + %y) U: full-set S: full-set
23
+ ; CHECK-NEXT: Determining loop execution counts for: @or-disjoint
24
+ ;
25
+ %or = or disjoint i8 %x , %y
26
+ ret i8 %or
27
+ }
28
+
29
+ define i8 @or-no-disjoint (i8 %x , i8 %y ) {
30
+ ; CHECK-LABEL: 'or-no-disjoint'
31
+ ; CHECK-NEXT: Classifying expressions for: @or-no-disjoint
32
+ ; CHECK-NEXT: %or = or i8 %x, %y
33
+ ; CHECK-NEXT: --> %or U: full-set S: full-set
34
+ ; CHECK-NEXT: Determining loop execution counts for: @or-no-disjoint
35
+ ;
36
+ %or = or i8 %x , %y
37
+ ret i8 %or
38
+ }
39
+
40
+ ; FIXME: We could add nuw nsw flags here.
41
+ define noundef i8 @or-disjoint-transfer-flags (i8 %x , i8 %y ) {
42
+ ; CHECK-LABEL: 'or-disjoint-transfer-flags'
43
+ ; CHECK-NEXT: Classifying expressions for: @or-disjoint-transfer-flags
44
+ ; CHECK-NEXT: %or = or disjoint i8 %x, %y
45
+ ; CHECK-NEXT: --> (%x + %y) U: full-set S: full-set
46
+ ; CHECK-NEXT: Determining loop execution counts for: @or-disjoint-transfer-flags
47
+ ;
48
+ %or = or disjoint i8 %x , %y
49
+ ret i8 %or
50
+ }
51
+
18
52
define void @mask-high (i64 %arg , ptr dereferenceable (4 ) %arg1 ) {
19
53
; CHECK-LABEL: 'mask-high'
20
54
; CHECK-NEXT: Classifying expressions for: @mask-high
@@ -24,7 +58,7 @@ define void @mask-high(i64 %arg, ptr dereferenceable(4) %arg1) {
24
58
; CHECK-NEXT: --> (sext i32 %i to i64) U: [-2147483648,2147483648) S: [-2147483648,2147483648)
25
59
; CHECK-NEXT: %i3 = and i64 %arg, -16
26
60
; CHECK-NEXT: --> (16 * (%arg /u 16))<nuw> U: [0,-15) S: [-9223372036854775808,9223372036854775793)
27
- ; CHECK-NEXT: %i4 = or i64 1, %i3
61
+ ; CHECK-NEXT: %i4 = or disjoint i64 1, %i3
28
62
; CHECK-NEXT: --> (1 + (16 * (%arg /u 16))<nuw>)<nuw><nsw> U: [1,-14) S: [-9223372036854775807,9223372036854775794)
29
63
; CHECK-NEXT: %i7 = phi i64 [ %i4, %bb ], [ %i8, %bb6 ]
30
64
; CHECK-NEXT: --> {(1 + (16 * (%arg /u 16))<nuw>)<nuw><nsw>,+,1}<%bb6> U: full-set S: full-set Exits: ((sext i32 %i to i64) smax (1 + (16 * (%arg /u 16))<nuw>)<nuw><nsw>) LoopDispositions: { %bb6: Computable }
42
76
%i = load i32 , ptr %arg1 , align 4
43
77
%i2 = sext i32 %i to i64
44
78
%i3 = and i64 %arg , -16
45
- %i4 = or i64 1 , %i3
79
+ %i4 = or disjoint i64 1 , %i3
46
80
%i5 = icmp sgt i64 %i4 , %i2
47
81
br i1 %i5 , label %bb10 , label %bb6
48
82
0 commit comments