1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-25 20:23:11 +01:00
llvm-mirror/test/Transforms/JumpThreading/constant-fold-status.ll
David Stenberg 62e28be266 [JumpThreading] Fix an incorrect Modified status
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
2020-09-14 10:36:13 +02:00

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()