@@ -322,12 +322,10 @@ define i1 @xor_icmp_to_icmp_add_multiuse2(i32 %a) {
322322
323323define i1 @test_xor_of_bittest_ne_ne (i8 %x , i8 %y ) {
324324; CHECK-LABEL: @test_xor_of_bittest_ne_ne(
325- ; CHECK-NEXT: [[MASK1:%.*]] = and i8 [[X:%.*]], 2
326- ; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 [[MASK1]], 0
327- ; CHECK-NEXT: [[MASK2:%.*]] = and i8 [[Y:%.*]], 2
325+ ; CHECK-NEXT: [[Y:%.*]] = xor i8 [[X:%.*]], [[Y1:%.*]]
326+ ; CHECK-NEXT: [[MASK2:%.*]] = and i8 [[Y]], 2
328327; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 [[MASK2]], 0
329- ; CHECK-NEXT: [[XOR:%.*]] = xor i1 [[CMP1]], [[CMP2]]
330- ; CHECK-NEXT: ret i1 [[XOR]]
328+ ; CHECK-NEXT: ret i1 [[CMP2]]
331329;
332330 %mask1 = and i8 %x , 2
333331 %cmp1 = icmp ne i8 %mask1 , 0
@@ -339,11 +337,9 @@ define i1 @test_xor_of_bittest_ne_ne(i8 %x, i8 %y) {
339337
340338define i1 @test_xor_of_bittest_eq_eq (i8 %x , i8 %y ) {
341339; CHECK-LABEL: @test_xor_of_bittest_eq_eq(
342- ; CHECK-NEXT: [[MASK1:%.*]] = and i8 [[X:%.*]], 2
343- ; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 [[MASK1]], 0
344- ; CHECK-NEXT: [[MASK2:%.*]] = and i8 [[Y:%.*]], 2
345- ; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 [[MASK2]], 0
346- ; CHECK-NEXT: [[XOR:%.*]] = xor i1 [[CMP1]], [[CMP2]]
340+ ; CHECK-NEXT: [[Y:%.*]] = xor i8 [[X:%.*]], [[Y1:%.*]]
341+ ; CHECK-NEXT: [[MASK2:%.*]] = and i8 [[Y]], 2
342+ ; CHECK-NEXT: [[XOR:%.*]] = icmp ne i8 [[MASK2]], 0
347343; CHECK-NEXT: ret i1 [[XOR]]
348344;
349345 %mask1 = and i8 %x , 2
@@ -356,12 +352,10 @@ define i1 @test_xor_of_bittest_eq_eq(i8 %x, i8 %y) {
356352
357353define i1 @test_xor_of_bittest_ne_eq (i8 %x , i8 %y ) {
358354; CHECK-LABEL: @test_xor_of_bittest_ne_eq(
359- ; CHECK-NEXT: [[MASK1:%.*]] = and i8 [[X:%.*]], 2
360- ; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 [[MASK1]], 0
361- ; CHECK-NEXT: [[MASK2:%.*]] = and i8 [[Y:%.*]], 2
355+ ; CHECK-NEXT: [[Y:%.*]] = xor i8 [[X:%.*]], [[Y1:%.*]]
356+ ; CHECK-NEXT: [[MASK2:%.*]] = and i8 [[Y]], 2
362357; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 [[MASK2]], 0
363- ; CHECK-NEXT: [[XOR:%.*]] = xor i1 [[CMP1]], [[CMP2]]
364- ; CHECK-NEXT: ret i1 [[XOR]]
358+ ; CHECK-NEXT: ret i1 [[CMP2]]
365359;
366360 %mask1 = and i8 %x , 2
367361 %cmp1 = icmp ne i8 %mask1 , 0
@@ -373,12 +367,10 @@ define i1 @test_xor_of_bittest_ne_eq(i8 %x, i8 %y) {
373367
374368define i1 @test_xor_of_bittest_eq_ne (i8 %x , i8 %y ) {
375369; CHECK-LABEL: @test_xor_of_bittest_eq_ne(
376- ; CHECK-NEXT: [[MASK1:%.*]] = and i8 [[X:%.*]], 2
370+ ; CHECK-NEXT: [[X:%.*]] = xor i8 [[X1:%.*]], [[Y:%.*]]
371+ ; CHECK-NEXT: [[MASK1:%.*]] = and i8 [[X]], 2
377372; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 [[MASK1]], 0
378- ; CHECK-NEXT: [[MASK2:%.*]] = and i8 [[Y:%.*]], 2
379- ; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 [[MASK2]], 0
380- ; CHECK-NEXT: [[XOR:%.*]] = xor i1 [[CMP1]], [[CMP2]]
381- ; CHECK-NEXT: ret i1 [[XOR]]
373+ ; CHECK-NEXT: ret i1 [[CMP1]]
382374;
383375 %mask1 = and i8 %x , 2
384376 %cmp1 = icmp eq i8 %mask1 , 0
@@ -392,11 +384,11 @@ define i1 @test_xor_of_bittest_ne_ne_multiuse1(i8 %x, i8 %y) {
392384; CHECK-LABEL: @test_xor_of_bittest_ne_ne_multiuse1(
393385; CHECK-NEXT: [[MASK1:%.*]] = and i8 [[X:%.*]], 2
394386; CHECK-NEXT: call void @usei8(i8 [[MASK1]])
395- ; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i8 [[MASK1]], 0
396387; CHECK-NEXT: [[MASK2:%.*]] = and i8 [[Y:%.*]], 2
397388; CHECK-NEXT: call void @usei8(i8 [[MASK2]])
398- ; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i8 [[MASK2]], 0
399- ; CHECK-NEXT: [[XOR:%.*]] = xor i1 [[CMP1]], [[CMP2]]
389+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i8 [[X]], [[Y]]
390+ ; CHECK-NEXT: [[TMP2:%.*]] = and i8 [[TMP1]], 2
391+ ; CHECK-NEXT: [[XOR:%.*]] = icmp ne i8 [[TMP2]], 0
400392; CHECK-NEXT: ret i1 [[XOR]]
401393;
402394 %mask1 = and i8 %x , 2
0 commit comments