@@ -1448,4 +1448,85 @@ exit: ; preds = %loop
14481448 ret i16 %crc.next
14491449}
14501450
1451+ define i16 @not.crc.data.next.outside.user (i16 %crc.init , i16 %data.init ) {
1452+ ; CHECK-LABEL: 'not.crc.data.next.outside.user'
1453+ ; CHECK-NEXT: Did not find a hash algorithm
1454+ ; CHECK-NEXT: Reason: Recurrences have stray uses
1455+ ;
1456+ entry:
1457+ br label %loop
1458+
1459+ loop:
1460+ %iv = phi i32 [ 0 , %entry ], [ %iv.next , %loop ]
1461+ %crc = phi i16 [ %crc.init , %entry ], [ %crc.next , %loop ]
1462+ %data = phi i16 [ %data.init , %entry ], [ %data.next , %loop ]
1463+ %xor.crc.data = xor i16 %data , %crc
1464+ %crc.shl = shl i16 %crc , 1
1465+ %crc.xor = xor i16 %crc.shl , 3
1466+ %check.sb = icmp slt i16 %xor.crc.data , 0
1467+ %crc.next = select i1 %check.sb , i16 %crc.xor , i16 %crc.shl
1468+ %data.next = shl i16 %data , 1
1469+ %iv.next = add nuw nsw i32 %iv , 1
1470+ %exit.cond = icmp samesign ult i32 %iv , 7
1471+ br i1 %exit.cond , label %loop , label %exit
1472+
1473+ exit:
1474+ %ret = xor i16 %data.next , %crc.next
1475+ ret i16 %ret
1476+ }
1477+
1478+ define i16 @not.crc.data.phi.outside.user (i16 %crc.init , i16 %data.init ) {
1479+ ; CHECK-LABEL: 'not.crc.data.phi.outside.user'
1480+ ; CHECK-NEXT: Did not find a hash algorithm
1481+ ; CHECK-NEXT: Reason: Recurrences have stray uses
1482+ ;
1483+ entry:
1484+ br label %loop
1485+
1486+ loop:
1487+ %iv = phi i32 [ 0 , %entry ], [ %iv.next , %loop ]
1488+ %crc = phi i16 [ %crc.init , %entry ], [ %crc.next , %loop ]
1489+ %data = phi i16 [ %data.init , %entry ], [ %data.next , %loop ]
1490+ %xor.crc.data = xor i16 %data , %crc
1491+ %crc.shl = shl i16 %crc , 1
1492+ %crc.xor = xor i16 %crc.shl , 3
1493+ %check.sb = icmp slt i16 %xor.crc.data , 0
1494+ %crc.next = select i1 %check.sb , i16 %crc.xor , i16 %crc.shl
1495+ %data.next = shl i16 %data , 1
1496+ %iv.next = add nuw nsw i32 %iv , 1
1497+ %exit.cond = icmp samesign ult i32 %iv , 7
1498+ br i1 %exit.cond , label %loop , label %exit
1499+
1500+ exit:
1501+ %ret = xor i16 %data , %crc.next
1502+ ret i16 %ret
1503+ }
1504+
1505+ define i16 @not.crc.crc.phi.outside.user (i16 %crc.init , i16 %data.init ) {
1506+ ; CHECK-LABEL: 'not.crc.crc.phi.outside.user'
1507+ ; CHECK-NEXT: Did not find a hash algorithm
1508+ ; CHECK-NEXT: Reason: Recurrences have stray uses
1509+ ;
1510+ entry:
1511+ br label %loop
1512+
1513+ loop:
1514+ %iv = phi i32 [ 0 , %entry ], [ %iv.next , %loop ]
1515+ %crc = phi i16 [ %crc.init , %entry ], [ %crc.next , %loop ]
1516+ %data = phi i16 [ %data.init , %entry ], [ %data.next , %loop ]
1517+ %xor.crc.data = xor i16 %data , %crc
1518+ %crc.shl = shl i16 %crc , 1
1519+ %crc.xor = xor i16 %crc.shl , 3
1520+ %check.sb = icmp slt i16 %xor.crc.data , 0
1521+ %crc.next = select i1 %check.sb , i16 %crc.xor , i16 %crc.shl
1522+ %data.next = shl i16 %data , 1
1523+ %iv.next = add nuw nsw i32 %iv , 1
1524+ %exit.cond = icmp samesign ult i32 %iv , 7
1525+ br i1 %exit.cond , label %loop , label %exit
1526+
1527+ exit:
1528+ %ret = xor i16 %crc , %crc.next
1529+ ret i16 %ret
1530+ }
1531+
14511532declare i16 @side.effect ()
0 commit comments