mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:12:47 +01:00
669dbd44d7
When removing an overflow intrinsic the Changed status in SimplifyIndvar was not set, leading to the IndVarSimplify pass returning an incorrect status. This was caught using the check introduced by D80916. As pointed out in the code review, a similar bug may exist for eliminateTrunc(). Reviewed By: reames Differential Revision: https://reviews.llvm.org/D85971
47 lines
1.5 KiB
LLVM
47 lines
1.5 KiB
LLVM
; RUN: opt < %s -indvars -S -o - | FileCheck %s
|
|
|
|
; When eliminating the overflow intrinsic the indvars pass would incorrectly
|
|
; return a false Modified status. This was caught by the pass return
|
|
; status check that is hidden under EXPENSIVE_CHECKS.
|
|
|
|
; CHECK-LABEL: for.body:
|
|
; CHECK-NEXT: %0 = phi i16 [ %1, %for.body ], [ undef, %for.body.preheader ]
|
|
; CHECK-NEXT: %1 = add nsw i16 %0, -1
|
|
; CHECK-NEXT: %cmp = icmp sgt i16 %1, 0
|
|
; CHECK-NEXT: call void @llvm.assume(i1 %cmp)
|
|
|
|
; Function Attrs: nounwind
|
|
define void @foo() #0 {
|
|
entry:
|
|
%cmp1 = icmp sgt i16 undef, 0
|
|
br i1 %cmp1, label %for.body.preheader, label %for.end
|
|
|
|
for.body.preheader: ; preds = %entry
|
|
br label %for.body
|
|
|
|
for.body: ; preds = %for.body.preheader, %for.body
|
|
%0 = phi i16 [ %2, %for.body ], [ undef, %for.body.preheader ]
|
|
%1 = call { i16, i1 } @llvm.sadd.with.overflow.i16(i16 %0, i16 -1)
|
|
%2 = extractvalue { i16, i1 } %1, 0
|
|
%cmp = icmp sgt i16 %2, 0
|
|
call void @llvm.assume(i1 %cmp)
|
|
br label %for.body
|
|
|
|
for.end: ; preds = %entry
|
|
ret void
|
|
}
|
|
|
|
; Function Attrs: nounwind readnone speculatable willreturn
|
|
declare { i16, i1 } @llvm.sadd.with.overflow.i16(i16, i16) #1
|
|
|
|
; Function Attrs: nounwind willreturn
|
|
declare void @llvm.assume(i1) #2
|
|
|
|
attributes #0 = { nounwind }
|
|
attributes #1 = { nounwind readnone speculatable willreturn }
|
|
attributes #2 = { nounwind willreturn }
|
|
|
|
!llvm.ident = !{!0}
|
|
|
|
!0 = !{!"clang version 12.0.0"}
|