@@ -97,11 +97,10 @@ define i3 @or_xor_xor_normal_multiple_uses_and(i3 %a, i3 %b) {
97
97
98
98
define i32 @or_xor_xor_negative_multiple_uses_xor1 (i32 %a , i32 %b ) {
99
99
; CHECK-LABEL: @or_xor_xor_negative_multiple_uses_xor1(
100
- ; CHECK-NEXT: [[AND :%.*]] = and i32 [[A:%.*]], [[B:%.*]]
101
- ; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[AND ]], [[B]]
100
+ ; CHECK-NEXT: [[AND1 :%.*]] = xor i32 [[A:%.*]], -1
101
+ ; CHECK-NEXT: [[XOR1:%.*]] = and i32 [[AND1 ]], [[B:%.* ]]
102
102
; CHECK-NEXT: call void @use.i32(i32 [[XOR1]])
103
- ; CHECK-NEXT: [[XOR2:%.*]] = xor i32 [[AND]], [[A]]
104
- ; CHECK-NEXT: [[OR:%.*]] = or i32 [[XOR1]], [[XOR2]]
103
+ ; CHECK-NEXT: [[OR:%.*]] = xor i32 [[A]], [[B]]
105
104
; CHECK-NEXT: ret i32 [[OR]]
106
105
;
107
106
%and = and i32 %a , %b
@@ -114,11 +113,10 @@ define i32 @or_xor_xor_negative_multiple_uses_xor1(i32 %a, i32 %b) {
114
113
115
114
define i5 @or_xor_xor_negative_multiple_uses_xor2 (i5 %a , i5 %b ) {
116
115
; CHECK-LABEL: @or_xor_xor_negative_multiple_uses_xor2(
117
- ; CHECK-NEXT: [[AND:%.*]] = and i5 [[A:%.*]], [[B:%.*]]
118
- ; CHECK-NEXT: [[XOR1:%.*]] = xor i5 [[AND]], [[B]]
119
- ; CHECK-NEXT: [[XOR2:%.*]] = xor i5 [[AND]], [[A]]
116
+ ; CHECK-NEXT: [[A1:%.*]] = xor i5 [[B:%.*]], -1
117
+ ; CHECK-NEXT: [[XOR2:%.*]] = and i5 [[A1]], [[A:%.*]]
120
118
; CHECK-NEXT: call void @use.i5(i5 [[XOR2]])
121
- ; CHECK-NEXT: [[OR:%.*]] = or i5 [[XOR1 ]], [[XOR2 ]]
119
+ ; CHECK-NEXT: [[OR:%.*]] = xor i5 [[A ]], [[B ]]
122
120
; CHECK-NEXT: ret i5 [[OR]]
123
121
;
124
122
%and = and i5 %a , %b
0 commit comments