Skip to content

Commit 8467b98

Browse files
committed
[HashRecognize] Pre-commit tests for PHIsIntertwined
1 parent 67e73ba commit 8467b98

File tree

1 file changed

+56
-2
lines changed

1 file changed

+56
-2
lines changed

llvm/test/Analysis/HashRecognize/cyclic-redundancy-check.ll

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,34 @@ exit: ; preds = %loop
144144
ret i16 %crc.next
145145
}
146146

147+
define i8 @crc8.le.tc16(i16 %msg, i8 %checksum) {
148+
; CHECK-LABEL: 'crc8.le.tc16'
149+
; CHECK-NEXT: Did not find a hash algorithm
150+
; CHECK-NEXT: Reason: Simple recurrence doesn't use conditional recurrence with XOR
151+
;
152+
entry:
153+
br label %loop
154+
155+
loop: ; preds = %loop, %entry
156+
%iv = phi i8 [ 0, %entry ], [ %iv.next, %loop ]
157+
%crc = phi i8 [ %checksum, %entry ], [ %crc.next, %loop ]
158+
%data = phi i16 [ %msg, %entry ], [ %data.next, %loop ]
159+
%data.trunc = trunc i16 %data to i8
160+
%xor.crc.data = xor i8 %crc, %data.trunc
161+
%and.crc.data = and i8 %xor.crc.data, 1
162+
%data.next = lshr i16 %data, 1
163+
%check.sb = icmp eq i8 %and.crc.data, 0
164+
%crc.lshr = lshr i8 %crc, 1
165+
%crc.xor = xor i8 %crc.lshr, 29
166+
%crc.next = select i1 %check.sb, i8 %crc.lshr, i8 %crc.xor
167+
%iv.next = add nuw nsw i8 %iv, 1
168+
%exit.cond = icmp samesign ult i8 %iv, 15
169+
br i1 %exit.cond, label %loop, label %exit
170+
171+
exit: ; preds = %loop
172+
ret i8 %crc.next
173+
}
174+
147175
define i16 @crc16.be.tc8.crc.init.li(i16 %checksum, i8 %msg) {
148176
; CHECK-LABEL: 'crc16.be.tc8.crc.init.li'
149177
; CHECK-NEXT: Found big-endian CRC-16 loop with trip count 8
@@ -610,9 +638,8 @@ loop: ; preds = %loop, %entry
610638
%iv = phi i8 [ 0, %entry ], [ %iv.next, %loop ]
611639
%data = phi i8 [ %msg, %entry ], [ %data.next, %loop ]
612640
%crc = phi i16 [ %checksum, %entry ], [ %crc.next, %loop ]
613-
%crc.lshr = lshr i16 %crc, 8
614641
%data.ext = zext i8 %data to i16
615-
%xor.crc.data = xor i16 %crc.lshr, %data.ext
642+
%xor.crc.data = xor i16 %crc, %data.ext
616643
%check.sb = icmp samesign ult i16 %xor.crc.data, 128
617644
%crc.shl = shl i16 %crc, 1
618645
%crc.xor = xor i16 %crc.shl, 258
@@ -838,6 +865,33 @@ exit: ; preds = %loop
838865
ret i16 %crc.next
839866
}
840867

868+
define i16 @not.crc.bad.cast(i8 %msg, i16 %checksum) {
869+
; CHECK-LABEL: 'not.crc.bad.cast'
870+
; CHECK-NEXT: Did not find a hash algorithm
871+
; CHECK-NEXT: Reason: Simple recurrence doesn't use conditional recurrence with XOR
872+
;
873+
entry:
874+
br label %loop
875+
876+
loop: ; preds = %loop, %entry
877+
%iv = phi i8 [ 0, %entry ], [ %iv.next, %loop ]
878+
%data = phi i8 [ %msg, %entry ], [ %data.next, %loop ]
879+
%crc = phi i16 [ %checksum, %entry ], [ %crc.next, %loop ]
880+
%data.ext = zext i8 %data to i16
881+
%xor.crc.data = xor i16 %crc, %data.ext
882+
%check.sb = icmp slt i16 %xor.crc.data, 0
883+
%crc.shl = shl i16 %crc, 1
884+
%crc.xor = xor i16 %crc.shl, 29
885+
%crc.next = select i1 %check.sb, i16 %crc.shl, i16 %crc.xor
886+
%data.next = shl i8 %data, 1
887+
%iv.next = add nuw nsw i8 %iv, 1
888+
%exit.cond = icmp samesign ult i8 %iv, 7
889+
br i1 %exit.cond, label %loop, label %exit
890+
891+
exit: ; preds = %loop
892+
ret i16 %crc.next
893+
}
894+
841895
define i32 @not.crc.dead.msg.bad.use(i32 %checksum, i32 %msg) {
842896
; CHECK-LABEL: 'not.crc.dead.msg.bad.use'
843897
; CHECK-NEXT: Did not find a hash algorithm

0 commit comments

Comments
 (0)