@@ -1485,3 +1485,111 @@ define i4 @PR96857_xor_without_noundef(i4 %val0, i4 %val1, i4 %val2) {
1485
1485
%val7 = xor i4 %val4 , %val6
1486
1486
ret i4 %val7
1487
1487
}
1488
+
1489
+ define i32 @or_disjoint_with_xor (i32 %a , i32 %b , i32 %c ) {
1490
+ ; CHECK-LABEL: @or_disjoint_with_xor(
1491
+ ; CHECK-NEXT: entry:
1492
+ ; CHECK-NEXT: [[OR:%.*]] = or disjoint i32 [[A:%.*]], [[B:%.*]]
1493
+ ; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[OR]], [[C:%.*]]
1494
+ ; CHECK-NEXT: ret i32 [[XOR]]
1495
+ ;
1496
+ entry:
1497
+ %or = or disjoint i32 %a , %b
1498
+ %xor = xor i32 %or , %c
1499
+ ret i32 %xor
1500
+ }
1501
+
1502
+ define i32 @xor_with_or_disjoint (i32 %a , i32 %b , i32 %c ) {
1503
+ ; CHECK-LABEL: @xor_with_or_disjoint(
1504
+ ; CHECK-NEXT: entry:
1505
+ ; CHECK-NEXT: [[OR:%.*]] = or disjoint i32 [[A:%.*]], [[B:%.*]]
1506
+ ; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[C:%.*]], [[OR]]
1507
+ ; CHECK-NEXT: ret i32 [[XOR]]
1508
+ ;
1509
+ entry:
1510
+ %or = or disjoint i32 %a , %b
1511
+ %xor = xor i32 %c , %or
1512
+ ret i32 %xor
1513
+ }
1514
+
1515
+ define <2 x i32 > @or_disjoint_with_xor_vec (<2 x i32 > %a , < 2 x i32 > %b , <2 x i32 > %c ) {
1516
+ ; CHECK-LABEL: @or_disjoint_with_xor_vec(
1517
+ ; CHECK-NEXT: entry:
1518
+ ; CHECK-NEXT: [[OR:%.*]] = or disjoint <2 x i32> [[A:%.*]], [[B:%.*]]
1519
+ ; CHECK-NEXT: [[XOR:%.*]] = xor <2 x i32> [[OR]], [[C:%.*]]
1520
+ ; CHECK-NEXT: ret <2 x i32> [[XOR]]
1521
+ ;
1522
+ entry:
1523
+ %or = or disjoint <2 x i32 > %a , %b
1524
+ %xor = xor <2 x i32 > %or , %c
1525
+ ret <2 x i32 > %xor
1526
+ }
1527
+
1528
+ define <2 x i32 > @xor_with_or_disjoint_vec (<2 x i32 > %a , < 2 x i32 > %b , <2 x i32 > %c ) {
1529
+ ; CHECK-LABEL: @xor_with_or_disjoint_vec(
1530
+ ; CHECK-NEXT: entry:
1531
+ ; CHECK-NEXT: [[OR:%.*]] = or disjoint <2 x i32> [[A:%.*]], [[B:%.*]]
1532
+ ; CHECK-NEXT: [[XOR:%.*]] = xor <2 x i32> [[C:%.*]], [[OR]]
1533
+ ; CHECK-NEXT: ret <2 x i32> [[XOR]]
1534
+ ;
1535
+ entry:
1536
+ %or = or disjoint <2 x i32 > %a , %b
1537
+ %xor = xor <2 x i32 > %c , %or
1538
+ ret <2 x i32 > %xor
1539
+ }
1540
+
1541
+ define i32 @or_multi_use_disjoint_with_xor (i32 %a , i32 %b , i32 %c ) {
1542
+ ; CHECK-LABEL: @or_multi_use_disjoint_with_xor(
1543
+ ; CHECK-NEXT: entry:
1544
+ ; CHECK-NEXT: [[OR:%.*]] = or disjoint i32 [[A:%.*]], [[B:%.*]]
1545
+ ; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[OR]], [[C:%.*]]
1546
+ ; CHECK-NEXT: [[ADD:%.*]] = add i32 [[OR]], [[XOR]]
1547
+ ; CHECK-NEXT: ret i32 [[ADD]]
1548
+ ;
1549
+ entry:
1550
+ %or = or disjoint i32 %a , %b
1551
+ %xor = xor i32 %or , %c
1552
+ %add = add i32 %or , %xor
1553
+ ret i32 %add
1554
+ }
1555
+
1556
+ define <2 x i32 > @or_multi_use_disjoint_with_xor_vec (<2 x i32 > %a , <2 x i32 > %b , <2 x i32 > %c ) {
1557
+ ; CHECK-LABEL: @or_multi_use_disjoint_with_xor_vec(
1558
+ ; CHECK-NEXT: entry:
1559
+ ; CHECK-NEXT: [[OR:%.*]] = or disjoint <2 x i32> [[A:%.*]], [[B:%.*]]
1560
+ ; CHECK-NEXT: [[XOR:%.*]] = xor <2 x i32> [[OR]], [[C:%.*]]
1561
+ ; CHECK-NEXT: [[ADD:%.*]] = add <2 x i32> [[OR]], [[XOR]]
1562
+ ; CHECK-NEXT: ret <2 x i32> [[ADD]]
1563
+ ;
1564
+ entry:
1565
+ %or = or disjoint <2 x i32 > %a , %b
1566
+ %xor = xor <2 x i32 > %or , %c
1567
+ %add = add <2 x i32 > %or , %xor
1568
+ ret <2 x i32 > %add
1569
+ }
1570
+
1571
+ define i32 @add_with_or (i32 %a , i32 %b , i32 %c ) {
1572
+ ; CHECK-LABEL: @add_with_or(
1573
+ ; CHECK-NEXT: entry:
1574
+ ; CHECK-NEXT: [[ADD:%.*]] = add i32 [[A:%.*]], [[B:%.*]]
1575
+ ; CHECK-NEXT: [[OR:%.*]] = or i32 [[ADD]], [[C:%.*]]
1576
+ ; CHECK-NEXT: ret i32 [[OR]]
1577
+ ;
1578
+ entry:
1579
+ %add = add i32 %a , %b
1580
+ %or = or i32 %add , %c
1581
+ ret i32 %or
1582
+ }
1583
+
1584
+ define <2 x i32 > @add_with_or_vec (<2 x i32 > %a , <2 x i32 > %b , <2 x i32 > %c ) {
1585
+ ; CHECK-LABEL: @add_with_or_vec(
1586
+ ; CHECK-NEXT: entry:
1587
+ ; CHECK-NEXT: [[ADD:%.*]] = add <2 x i32> [[A:%.*]], [[B:%.*]]
1588
+ ; CHECK-NEXT: [[OR:%.*]] = or <2 x i32> [[ADD]], [[C:%.*]]
1589
+ ; CHECK-NEXT: ret <2 x i32> [[OR]]
1590
+ ;
1591
+ entry:
1592
+ %add = add <2 x i32 > %a , %b
1593
+ %or = or <2 x i32 > %add , %c
1594
+ ret <2 x i32 > %or
1595
+ }
0 commit comments