mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
62e28be266
This fixes PR47297. When ProcessBlock() was able to constant fold the terminator's condition, but not do any more transformations, the function would return false, which would lead to the JumpThreading pass returning an incorrect modified status. This patch makes so that ProcessBlock() returns true in such cases. This will trigger an unnecessary invocation of ProcessBlock() in such cases, but this should be rare to occur. This was caught using the check introduced by D80916. Reviewed By: efriedma Differential Revision: https://reviews.llvm.org/D87392
29 lines
895 B
LLVM
29 lines
895 B
LLVM
; RUN: opt -jump-threading < %s -S -o - | FileCheck %s
|
|
|
|
; Reproducer for PR47297.
|
|
|
|
; The pass did previously not report a correct Modified status in the case
|
|
; where a terminator's condition was successfully constant folded, but there
|
|
; were no other transformations done. This was caught by the pass return
|
|
; status check that is hidden under EXPENSIVE_CHECKS.
|
|
|
|
; CHECK-LABEL: entry:
|
|
; CHECK-NEXT: br i1 icmp eq (i32 ptrtoint (i16* @a to i32), i32 0), label %overflow, label %cont
|
|
|
|
@a = internal global i16 0
|
|
|
|
define void @foo(i16 %d) {
|
|
entry:
|
|
%.not = icmp eq i16 zext (i1 icmp ne (i32 ptrtoint (i16* @a to i32), i32 0) to i16), 0
|
|
br i1 %.not, label %overflow, label %cont
|
|
|
|
overflow: ; preds = %entry
|
|
call void @bar()
|
|
br label %cont
|
|
|
|
cont: ; preds = %overflow, %entry
|
|
ret void
|
|
}
|
|
|
|
declare void @bar()
|