mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
[SimplifyCFG] TryToSimplifyUncondBranchFromEmptyBlock() already knows how to preserve DomTree
... so just ensure that we pass DomTreeUpdater it into it. Fixes DomTree preservation for a large number of tests, all of which are marked as such so that they do not regress.
This commit is contained in:
parent
eda37b998a
commit
785059d651
@ -6076,7 +6076,7 @@ bool SimplifyCFGOpt::simplifyUncondBranch(BranchInst *BI,
|
||||
(LoopHeaders->count(BB) || LoopHeaders->count(Succ)));
|
||||
BasicBlock::iterator I = BB->getFirstNonPHIOrDbg()->getIterator();
|
||||
if (I->isTerminator() && BB != &BB->getParent()->getEntryBlock() &&
|
||||
!NeedCanonicalLoop && TryToSimplifyUncondBranchFromEmptyBlock(BB))
|
||||
!NeedCanonicalLoop && TryToSimplifyUncondBranchFromEmptyBlock(BB, DTU))
|
||||
return true;
|
||||
|
||||
// If the only instruction in the block is a seteq/setne comparison against a
|
||||
|
@ -1,5 +1,5 @@
|
||||
; RUN: opt < %s -adce -simplifycfg -S | grep call
|
||||
; RUN: opt < %s -adce -adce-remove-loops -simplifycfg -S | grep call
|
||||
; RUN: opt < %s -adce -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | grep call
|
||||
; RUN: opt < %s -adce -adce-remove-loops -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | grep call
|
||||
|
||||
declare void @exit(i32)
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
; Test that if an invoked function is inlined, and if that function cannot
|
||||
; throw, that the dead handler is now unreachable.
|
||||
|
||||
; RUN: opt < %s -inline -simplifycfg -S | FileCheck %s
|
||||
; RUN: opt < %s -inline -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s
|
||||
|
||||
declare void @might_throw()
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: opt < %s -instcombine -mem2reg -simplifycfg | \
|
||||
; RUN: opt < %s -instcombine -mem2reg -simplifycfg -simplifycfg-require-and-preserve-domtree=1 | \
|
||||
; RUN: llvm-dis | grep -v store | not grep "i32 1"
|
||||
|
||||
; Test to make sure that instcombine does not accidentally propagate the load
|
||||
|
@ -1,5 +1,5 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt -jump-threading -simplifycfg -S < %s | FileCheck %s
|
||||
; RUN: opt -jump-threading -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S < %s | FileCheck %s
|
||||
declare void @ham()
|
||||
|
||||
define void @hoge() {
|
||||
|
@ -1,7 +1,7 @@
|
||||
; This is the test case taken from Appel's book that illustrates a hard case
|
||||
; that SCCP gets right, and when followed by ADCE, is completely eliminated
|
||||
;
|
||||
; RUN: opt < %s -sccp -simplifycfg -indvars -loop-deletion -dce -simplifycfg -S | not grep br
|
||||
; RUN: opt < %s -sccp -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -indvars -loop-deletion -dce -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | not grep br
|
||||
|
||||
define i32 @"test function"(i32 %i0, i32 %j0) {
|
||||
BB1:
|
||||
|
@ -1,7 +1,7 @@
|
||||
; Confirm that the line number for the do.body.preheader block
|
||||
; branch is the the start of the loop.
|
||||
|
||||
; RUN: opt -simplifycfg -loop-simplify -keep-loops="false" -S <%s | FileCheck %s
|
||||
; RUN: opt -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -loop-simplify -keep-loops="false" -S <%s | FileCheck %s
|
||||
|
||||
; CHECK: do.body.preheader:
|
||||
; CHECK-NEXT: phi
|
||||
|
@ -1,7 +1,7 @@
|
||||
; Confirm that the line number for the for.body.preheader block
|
||||
; branch is the the start of the loop.
|
||||
|
||||
; RUN: opt -simplifycfg -loop-simplify -S <%s | FileCheck %s
|
||||
; RUN: opt -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -loop-simplify -S <%s | FileCheck %s
|
||||
;
|
||||
; CHECK: for.body.preheader:
|
||||
; CHECK-NEXT: br label %for.body, !dbg ![[DL:[0-9]+]]
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: opt < %s -S -loop-unroll -unroll-force-peel-count=3 -verify-dom-info -simplifycfg -instcombine | FileCheck %s
|
||||
; RUN: opt < %s -S -loop-unroll -unroll-force-peel-count=3 -verify-dom-info -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -instcombine | FileCheck %s
|
||||
; RUN: opt < %s -S -passes='require<opt-remark-emit>,loop-unroll,simplify-cfg,instcombine' -unroll-force-peel-count=3 -verify-dom-info | FileCheck %s
|
||||
; RUN: opt < %s -S -passes='require<opt-remark-emit>,loop-unroll<peeling;no-runtime>,simplify-cfg,instcombine' -unroll-force-peel-count=3 -verify-dom-info | FileCheck %s
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
;RUN: opt -loop-unswitch -enable-new-pm=0 -simplifycfg -S < %s | FileCheck %s
|
||||
;RUN: opt -loop-unswitch -enable-new-pm=0 -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S < %s | FileCheck %s
|
||||
|
||||
define i32 @foo(i32 %a, i32 %b) {
|
||||
;CHECK-LABEL: foo
|
||||
|
@ -1,7 +1,7 @@
|
||||
; REQUIRES: asserts
|
||||
; RUN: opt -loop-unswitch -enable-new-pm=0 -disable-output -stats -info-output-file - < %s | FileCheck --check-prefix=STATS %s
|
||||
; RUN: opt -loop-unswitch -enable-new-pm=0 -enable-mssa-loop-dependency=true -verify-memoryssa -disable-output -stats -info-output-file - < %s | FileCheck --check-prefix=STATS %s
|
||||
; RUN: opt -loop-unswitch -enable-new-pm=0 -simplifycfg -S < %s | FileCheck %s
|
||||
; RUN: opt -loop-unswitch -enable-new-pm=0 -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S < %s | FileCheck %s
|
||||
; PR5373
|
||||
|
||||
; Loop unswitching shouldn't trivially unswitch the true case of condition %a
|
||||
|
@ -1,5 +1,5 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt -loop-vectorize -instcombine -simplifycfg < %s -S -o - | FileCheck %s
|
||||
; RUN: opt -loop-vectorize -instcombine -simplifycfg -simplifycfg-require-and-preserve-domtree=1 < %s -S -o - | FileCheck %s
|
||||
|
||||
target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
|
||||
target triple = "thumbv8.1m.main-arm-none-eabi"
|
||||
|
@ -1,5 +1,5 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt -loop-vectorize -instcombine -simplifycfg -tail-predication=enabled < %s -S -o - | FileCheck %s
|
||||
; RUN: opt -loop-vectorize -instcombine -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -tail-predication=enabled < %s -S -o - | FileCheck %s
|
||||
|
||||
target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
|
||||
target triple = "thumbv8.1m.main-arm-none-eabi"
|
||||
|
@ -1,5 +1,5 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt -loop-vectorize -S -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve.fp,mve1beat -dce -instcombine --simplifycfg -tail-predication=disabled < %s | FileCheck %s
|
||||
; RUN: opt -loop-vectorize -S -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve.fp,mve1beat -dce -instcombine --simplifycfg -simplifycfg-require-and-preserve-domtree=1 -tail-predication=disabled < %s | FileCheck %s
|
||||
|
||||
target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
|
||||
target triple = "thumbv8.1m.main-none-none-eabi"
|
||||
|
@ -1,5 +1,5 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve -tail-predication=enabled -loop-vectorize -instcombine -simplifycfg %s -S -o - | FileCheck %s
|
||||
; RUN: opt -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve -tail-predication=enabled -loop-vectorize -instcombine -simplifycfg -simplifycfg-require-and-preserve-domtree=1 %s -S -o - | FileCheck %s
|
||||
|
||||
target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt < %s -O3 -simplifycfg -keep-loops=false -mcpu=core-avx2 -mtriple=x86_64-unknown-linux-gnu -S | FileCheck --check-prefix AUTO_VEC %s
|
||||
; RUN: opt < %s -O3 -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -keep-loops=false -mcpu=core-avx2 -mtriple=x86_64-unknown-linux-gnu -S | FileCheck --check-prefix AUTO_VEC %s
|
||||
|
||||
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt -mcpu=skx -S -loop-vectorize -instcombine -simplifycfg -force-vector-width=8 -force-vector-interleave=1 -enable-interleaved-mem-accesses < %s | FileCheck %s -check-prefix=DISABLED_MASKED_STRIDED
|
||||
; RUN: opt -mcpu=skx -S -loop-vectorize -instcombine -simplifycfg -force-vector-width=8 -force-vector-interleave=1 -enable-interleaved-mem-accesses -enable-masked-interleaved-mem-accesses < %s | FileCheck %s -check-prefix=ENABLED_MASKED_STRIDED
|
||||
; RUN: opt -mcpu=skx -S -loop-vectorize -instcombine -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -force-vector-width=8 -force-vector-interleave=1 -enable-interleaved-mem-accesses < %s | FileCheck %s -check-prefix=DISABLED_MASKED_STRIDED
|
||||
; RUN: opt -mcpu=skx -S -loop-vectorize -instcombine -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -force-vector-width=8 -force-vector-interleave=1 -enable-interleaved-mem-accesses -enable-masked-interleaved-mem-accesses < %s | FileCheck %s -check-prefix=ENABLED_MASKED_STRIDED
|
||||
|
||||
target datalayout = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128"
|
||||
target triple = "i386-unknown-linux-gnu"
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: opt < %s -mattr=avx -force-vector-width=2 -force-vector-interleave=1 -loop-vectorize -simplifycfg -S | FileCheck %s
|
||||
; RUN: opt < %s -mattr=avx -force-vector-width=2 -force-vector-interleave=1 -loop-vectorize -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s
|
||||
; RUN: opt -mcpu=skylake-avx512 -S -force-vector-width=8 -force-vector-interleave=1 -loop-vectorize < %s | FileCheck %s --check-prefix=SINK-GATHER
|
||||
|
||||
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
|
||||
|
@ -1,7 +1,7 @@
|
||||
; RUN: opt < %s -loop-vectorize -force-vector-interleave=1 -force-vector-width=4 -dce -instcombine -S | FileCheck --check-prefix VEC4_INTERL1 %s
|
||||
; RUN: opt < %s -loop-vectorize -force-vector-interleave=2 -force-vector-width=4 -dce -instcombine -S | FileCheck --check-prefix VEC4_INTERL2 %s
|
||||
; RUN: opt < %s -loop-vectorize -force-vector-interleave=2 -force-vector-width=1 -dce -instcombine -S | FileCheck --check-prefix VEC1_INTERL2 %s
|
||||
; RUN: opt < %s -loop-vectorize -force-vector-interleave=1 -force-vector-width=2 -dce -simplifycfg -instcombine -simplifycfg -keep-loops=false -S | FileCheck --check-prefix VEC2_INTERL1_PRED_STORE %s
|
||||
; RUN: opt < %s -loop-vectorize -force-vector-interleave=1 -force-vector-width=2 -dce -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -instcombine -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -keep-loops=false -S | FileCheck --check-prefix VEC2_INTERL1_PRED_STORE %s
|
||||
|
||||
@fp_inc = common global float 0.000000e+00, align 4
|
||||
|
||||
@ -232,10 +232,10 @@ for.body: ; preds = %for.body, %for.body
|
||||
%exitcond = icmp eq i32 %lftr.wideiv, %N
|
||||
br i1 %exitcond, label %for.end.loopexit, label %for.body
|
||||
|
||||
for.end.loopexit:
|
||||
for.end.loopexit:
|
||||
br label %for.end
|
||||
|
||||
for.end:
|
||||
for.end:
|
||||
ret void
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
; RUN: opt -S -loop-vectorize -force-vector-interleave=1 -force-vector-width=4 -instsimplify -simplifycfg < %s | FileCheck %s
|
||||
; Note: -instsimplify -simplifycfg remove the (now dead) original loop, making
|
||||
; RUN: opt -S -loop-vectorize -force-vector-interleave=1 -force-vector-width=4 -instsimplify -simplifycfg -simplifycfg-require-and-preserve-domtree=1 < %s | FileCheck %s
|
||||
; Note: -instsimplify -simplifycfg -simplifycfg-require-and-preserve-domtree=1 remove the (now dead) original loop, making
|
||||
; it easy to test that the llvm.loop.unroll.disable hint is still present.
|
||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: opt -S -force-vector-width=2 -force-vector-interleave=1 -loop-vectorize -verify-loop-info -simplifycfg < %s | FileCheck %s
|
||||
; RUN: opt -S -force-vector-width=2 -force-vector-interleave=1 -loop-vectorize -verify-loop-info -simplifycfg -simplifycfg-require-and-preserve-domtree=1 < %s | FileCheck %s
|
||||
|
||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
; RUN: opt < %s -tbaa -basic-aa -loop-vectorize -force-vector-interleave=1 -force-vector-width=4 -dce -instcombine -simplifycfg -S | FileCheck %s
|
||||
; RUN: opt < %s -basic-aa -loop-vectorize -force-vector-interleave=1 -force-vector-width=4 -dce -instcombine -simplifycfg -S | FileCheck %s --check-prefix=CHECK-NOTBAA
|
||||
; RUN: opt < %s -tbaa -basic-aa -loop-vectorize -force-vector-interleave=1 -force-vector-width=4 -dce -instcombine -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s
|
||||
; RUN: opt < %s -basic-aa -loop-vectorize -force-vector-interleave=1 -force-vector-width=4 -dce -instcombine -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s --check-prefix=CHECK-NOTBAA
|
||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
||||
|
||||
; Function Attrs: nounwind uwtable
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: opt < %s -loop-vectorize -force-vector-interleave=1 -force-vector-width=4 -dce -instcombine -S -simplifycfg | FileCheck %s
|
||||
; RUN: opt < %s -loop-vectorize -force-vector-interleave=1 -force-vector-width=4 -dce -instcombine -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 | FileCheck %s
|
||||
|
||||
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
; this is in fact NOT the case, so the return should still be alive in the code
|
||||
; after sccp and CFG simplification have been performed.
|
||||
;
|
||||
; RUN: opt < %s -sccp -simplifycfg -S | \
|
||||
; RUN: opt < %s -sccp -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | \
|
||||
; RUN: grep ret
|
||||
|
||||
define void @old_main() {
|
||||
|
@ -3,7 +3,7 @@
|
||||
; due to the fact that the SimplifyCFG function does not use
|
||||
; the ConstantFoldTerminator function.
|
||||
|
||||
; RUN: opt < %s -simplifycfg -S | FileCheck %s
|
||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s
|
||||
|
||||
; CHECK-NOT: br i1 %c2
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
; NOTE: Assertions have been autogenerated by update_test_checks.py
|
||||
; RUN: opt < %s -simplifycfg -S | FileCheck %s
|
||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s
|
||||
|
||||
; Test normal folding
|
||||
define i32 @test1() {
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: opt < %s -simplifycfg -disable-output
|
||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -disable-output
|
||||
; END.
|
||||
|
||||
define void @main(i32 %c) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: opt < %s -gvn -simplifycfg -disable-output
|
||||
; RUN: opt < %s -gvn -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -disable-output
|
||||
; PR867
|
||||
|
||||
target datalayout = "E-p:32:32"
|
||||
|
@ -1,4 +1,4 @@
|
||||
;RUN: opt < %s -simplifycfg -disable-output
|
||||
;RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -disable-output
|
||||
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
|
||||
|
||||
define i32 @bork() nounwind {
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: opt < %s -simplifycfg -disable-output
|
||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -disable-output
|
||||
; PR 2800
|
||||
|
||||
define void @foo() {
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: opt < %s -simplifycfg -S | not grep select
|
||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | not grep select
|
||||
; ModuleID = '<stdin>'
|
||||
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
|
||||
target triple = "i386-apple-darwin10.0"
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: opt -S -simplifycfg -mtriple=aarch64 < %s | FileCheck %s
|
||||
; RUN: opt -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -mtriple=aarch64 < %s | FileCheck %s
|
||||
|
||||
define i32 @ctlz(i32 %A) {
|
||||
; CHECK-LABEL: @ctlz(
|
||||
|
@ -1,5 +1,5 @@
|
||||
; RUN: opt -S -simplifycfg -mtriple=amdgcn-unknown-unknown -mcpu=tahiti < %s | FileCheck -check-prefix=SI -check-prefix=ALL %s
|
||||
; RUN: opt -S -simplifycfg -mtriple=amdgcn-unknown-unknown -mcpu=tonga < %s | FileCheck -check-prefix=SI -check-prefix=ALL %s
|
||||
; RUN: opt -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -mtriple=amdgcn-unknown-unknown -mcpu=tahiti < %s | FileCheck -check-prefix=SI -check-prefix=ALL %s
|
||||
; RUN: opt -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -mtriple=amdgcn-unknown-unknown -mcpu=tonga < %s | FileCheck -check-prefix=SI -check-prefix=ALL %s
|
||||
|
||||
|
||||
define i64 @test1(i64 %A) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt -S -simplifycfg -mtriple=arm -mattr=+v6t2 < %s | FileCheck %s
|
||||
; RUN: opt -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -mtriple=arm -mattr=+v6t2 < %s | FileCheck %s
|
||||
|
||||
define i32 @ctlz(i32 %A) {
|
||||
; CHECK-LABEL: @ctlz(
|
||||
|
@ -1,8 +1,8 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt -mtriple=thumbv8.1m.main -simplifycfg -S %s -o - | FileCheck %s --check-prefix=V8M
|
||||
; RUN: opt -mtriple=thumbv8m.main -simplifycfg -S %s -o - | FileCheck %s --check-prefix=V8M
|
||||
; RUN: opt -mtriple=thumbv8m.base -simplifycfg -S %s -o - | FileCheck %s --check-prefix=V8M
|
||||
; RUN: opt -mtriple=armv8a -simplifycfg -S %s -o - | FileCheck %s --check-prefix=V8A
|
||||
; RUN: opt -mtriple=thumbv8.1m.main -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S %s -o - | FileCheck %s --check-prefix=V8M
|
||||
; RUN: opt -mtriple=thumbv8m.main -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S %s -o - | FileCheck %s --check-prefix=V8M
|
||||
; RUN: opt -mtriple=thumbv8m.base -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S %s -o - | FileCheck %s --check-prefix=V8M
|
||||
; RUN: opt -mtriple=armv8a -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S %s -o - | FileCheck %s --check-prefix=V8A
|
||||
|
||||
; Test that the phis from for.inc.preheader aren't hoisted into sw.bb92 because
|
||||
; the cost is too great - we can make a better decision later on.
|
||||
|
@ -1,5 +1,5 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt -S -simplifycfg < %s | FileCheck %s
|
||||
; RUN: opt -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 < %s | FileCheck %s
|
||||
|
||||
target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
|
||||
target triple = "armv7a--none-eabi"
|
||||
|
@ -1,6 +1,6 @@
|
||||
; Test merging of blocks with phi nodes.
|
||||
;
|
||||
; RUN: opt < %s -simplifycfg -S > %t
|
||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S > %t
|
||||
; RUN: not grep N: %t
|
||||
; RUN: not grep X: %t
|
||||
; RUN: not grep 'switch i32[^U]+%U' %t
|
||||
|
@ -1,6 +1,6 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt < %s -simplifycfg -forward-switch-cond=false -S | FileCheck %s --check-prefix=NO_FWD
|
||||
; RUN: opt < %s -simplifycfg -forward-switch-cond=true -S | FileCheck %s --check-prefix=FWD
|
||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -forward-switch-cond=false -S | FileCheck %s --check-prefix=NO_FWD
|
||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -forward-switch-cond=true -S | FileCheck %s --check-prefix=FWD
|
||||
|
||||
; RUN: opt < %s -passes='simplify-cfg<no-forward-switch-cond>' -S | FileCheck %s --check-prefix=NO_FWD
|
||||
; RUN: opt < %s -passes='simplify-cfg<forward-switch-cond>' -S | FileCheck %s --check-prefix=FWD
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: opt -S -simplifycfg -mtriple=mips-linux-gnu < %s | FileCheck %s
|
||||
; RUN: opt -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -mtriple=mips-linux-gnu < %s | FileCheck %s
|
||||
|
||||
define i32 @ctlz(i32 %A) {
|
||||
; CHECK-LABEL: @ctlz(
|
||||
|
@ -1,5 +1,5 @@
|
||||
; NOTE: Assertions have been autogenerated by update_test_checks.py
|
||||
; RUN: opt < %s -simplifycfg -S | FileCheck %s
|
||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s
|
||||
|
||||
@b = extern_weak global i32
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt < %s -simplifycfg -S | FileCheck %s
|
||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s
|
||||
|
||||
; In PR17073 ( http://llvm.org/pr17073 ), we illegally hoisted an operation that can trap.
|
||||
; The first test confirms that we don't do that when the trapping op is reached by the current BB (block1).
|
||||
|
@ -1,5 +1,5 @@
|
||||
; RUN: opt -S -simplifycfg -strip-debug < %s | FileCheck %s
|
||||
; RUN: opt -S -simplifycfg < %s | FileCheck %s
|
||||
; RUN: opt -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -strip-debug < %s | FileCheck %s
|
||||
; RUN: opt -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 < %s | FileCheck %s
|
||||
|
||||
; Test case for BUG-27615
|
||||
; Test that simplify cond branch produce same result for debug and non-debug builds
|
||||
|
@ -2,7 +2,7 @@
|
||||
; where the mergedinto block doesn't have any PHI nodes, and is in fact
|
||||
; dominated by the block-to-be-eliminated
|
||||
;
|
||||
; RUN: opt < %s -simplifycfg -S | not grep N:
|
||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | not grep N:
|
||||
;
|
||||
|
||||
declare i1 @foo()
|
||||
|
@ -3,7 +3,7 @@
|
||||
; nodes away allows the branches to be eliminated, performing a simple form of
|
||||
; 'if conversion'.
|
||||
|
||||
; RUN: opt < %s -simplifycfg -S > %t.xform
|
||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S > %t.xform
|
||||
; RUN: not grep phi %t.xform
|
||||
; RUN: grep ret %t.xform
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: opt -S -simplifycfg < %s | FileCheck -enable-var-scope %s
|
||||
; RUN: opt -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 < %s | FileCheck -enable-var-scope %s
|
||||
target datalayout = "E-m:e-i64:64-n32:64"
|
||||
target triple = "powerpc64-unknown-linux-gnu"
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: opt < %s -simplifycfg -S | FileCheck %s
|
||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s
|
||||
|
||||
; Check that we can get rid of empty block leading to header
|
||||
; if it does not introduce new edge.
|
||||
|
@ -1,5 +1,5 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt < %s -simplifycfg -switch-to-lookup -S -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
|
||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -switch-to-lookup -S -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
|
||||
; RUN: opt < %s -passes='simplify-cfg<switch-to-lookup>' -S -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
|
||||
|
||||
; In the presence of "-no-jump-tables"="true", simplifycfg should not convert switches to lookup tables.
|
||||
|
@ -1,5 +1,5 @@
|
||||
; RUN: opt < %s -simplifycfg -S | FileCheck %s
|
||||
; RUN: opt < %s -strip-debug -simplifycfg -S | FileCheck %s
|
||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s
|
||||
; RUN: opt < %s -strip-debug -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s
|
||||
|
||||
; Verify that the and.2 instruction is eliminated even in the presence of a
|
||||
; preceding debug intrinsic.
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: opt < %s -simplifycfg -S | FileCheck %s
|
||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s
|
||||
|
||||
; Check that the debug location for the hoisted store for "ret = 0" is a
|
||||
; line-0 location.
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: opt < %s -simplifycfg -S -hoist-common-insts=true | FileCheck %s
|
||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S -hoist-common-insts=true | FileCheck %s
|
||||
|
||||
; TODO: Track the acutal DebugLoc of the hoisted instruction when no-line
|
||||
; DebugLoc is supported (https://reviews.llvm.org/D24180)
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: opt < %s -simplifycfg -S | FileCheck %s
|
||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s
|
||||
|
||||
; Checks that the SimplifyCFG pass won't duplicate a call to a function marked
|
||||
; convergent.
|
||||
|
@ -1,5 +1,5 @@
|
||||
; RUN: opt < %s -simplifycfg -instcombine \
|
||||
; RUN: -simplifycfg -S | not grep call
|
||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -instcombine \
|
||||
; RUN: -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | not grep call
|
||||
|
||||
declare void @bar()
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: opt < %s -simplifycfg -S | not grep call
|
||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | not grep call
|
||||
|
||||
declare void @bar()
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt -simplifycfg -hoist-common-insts=1 -S < %s | FileCheck %s --check-prefix=HOIST
|
||||
; RUN: opt -simplifycfg -hoist-common-insts=0 -S < %s | FileCheck %s --check-prefix=NOHOIST
|
||||
; RUN: opt -simplifycfg -S < %s | FileCheck %s --check-prefix=NOHOIST
|
||||
; RUN: opt -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -hoist-common-insts=1 -S < %s | FileCheck %s --check-prefix=HOIST
|
||||
; RUN: opt -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -hoist-common-insts=0 -S < %s | FileCheck %s --check-prefix=NOHOIST
|
||||
; RUN: opt -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S < %s | FileCheck %s --check-prefix=NOHOIST
|
||||
|
||||
; This example is produced from a very basic C code:
|
||||
;
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: opt -simplifycfg -S < %s | FileCheck %s
|
||||
; RUN: opt -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S < %s | FileCheck %s
|
||||
|
||||
; See that we do not crash when queriying cost model about the cost of constant expression extractelement.
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: opt -S -o - %s -simplifycfg | FileCheck %s
|
||||
; RUN: opt -S -o - %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 | FileCheck %s
|
||||
|
||||
declare i1 @make_condition()
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt -simplifycfg -S < %s | FileCheck %s
|
||||
; RUN: opt -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S < %s | FileCheck %s
|
||||
|
||||
declare { i32, i1 } @llvm.uadd.with.overflow.i32(i32, i32) #1
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt -S -simplifycfg < %s | FileCheck %s
|
||||
; RUN: opt -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 < %s | FileCheck %s
|
||||
|
||||
declare void @llvm.experimental.guard(i1, ...)
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt -S < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -simplifycfg-merge-cond-stores=true -simplifycfg-merge-cond-stores-aggressively=false -phi-node-folding-threshold=1 | FileCheck %s
|
||||
; RUN: opt -S < %s -simplifycfg -simplifycfg-merge-cond-stores=true -simplifycfg-merge-cond-stores-aggressively=false -phi-node-folding-threshold=1 | FileCheck %s
|
||||
|
||||
target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
|
||||
target triple = "armv7--linux-gnueabihf"
|
||||
|
@ -1,5 +1,5 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt -simplifycfg -keep-loops=false -S < %s | FileCheck %s
|
||||
; RUN: opt -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -keep-loops=false -S < %s | FileCheck %s
|
||||
; RUN: opt -passes='simplify-cfg<no-keep-loops>' -S < %s | FileCheck %s
|
||||
|
||||
; It's not worthwhile to if-convert one of the phi nodes and leave
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: opt -simplifycfg -S %s | FileCheck %s
|
||||
; RUN: opt -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S %s | FileCheck %s
|
||||
; Make sure we don't speculate loads under AddressSanitizer.
|
||||
@g = global i32 0, align 4
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: opt -simplifycfg -S %s | FileCheck %s
|
||||
; RUN: opt -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S %s | FileCheck %s
|
||||
; Make sure we don't speculate loads under ThreadSanitizer.
|
||||
@g = global i32 0, align 4
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt -simplifycfg -S %s | FileCheck %s
|
||||
; RUN: opt -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S %s | FileCheck %s
|
||||
|
||||
@glob = internal constant [5 x i8*] zeroinitializer, align 16
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
; RUN: opt -simplifycfg -S -o - < %s | FileCheck %s
|
||||
; RUN: opt -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S -o - < %s | FileCheck %s
|
||||
|
||||
; This test case was written to trigger an incorrect assert statement in
|
||||
; -simplifycfg. Thus we don't actually want to check the output, just that
|
||||
; -simplifycfg ran successfully. Thus we only check that the function still
|
||||
; -simplifycfg -simplifycfg-require-and-preserve-domtree=1 ran successfully. Thus we only check that the function still
|
||||
; exists, and that it still calls foo().
|
||||
;
|
||||
; NOTE: There are some obviously dead blocks and missing branch weight
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: opt -simplifycfg -keep-loops=false -S < %s | FileCheck %s
|
||||
; RUN: opt -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -keep-loops=false -S < %s | FileCheck %s
|
||||
; RUN: opt -passes='simplify-cfg<no-keep-loops>' -S < %s | FileCheck %s
|
||||
|
||||
define void @test1(i32 %n) #0 {
|
||||
|
@ -1,5 +1,5 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S < %s | FileCheck %s
|
||||
; RUN: opt -simplifycfg -S < %s | FileCheck %s
|
||||
|
||||
%struct.Counters = type { i64, i64, i64, [8 x i8] }
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt -S -simplifycfg < %s | FileCheck %s
|
||||
; RUN: opt -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 < %s | FileCheck %s
|
||||
|
||||
%ST = type { i8, i8 }
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: opt -S -simplifycfg < %s | FileCheck %s
|
||||
; RUN: opt -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 < %s | FileCheck %s
|
||||
|
||||
; CHECK-LABEL: @speculatable_attribute
|
||||
; CHECK: select
|
||||
|
@ -1,5 +1,5 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt < %s -S -simplifycfg | FileCheck %s
|
||||
; RUN: opt < %s -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 | FileCheck %s
|
||||
|
||||
; This test case was generated from speculate-dbgvalue.c:
|
||||
;
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: opt -simplifycfg -S < %s | FileCheck %s
|
||||
; RUN: opt -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S < %s | FileCheck %s
|
||||
|
||||
define void @ifconvertstore(i32* %A, i32 %B, i32 %C, i32 %D) {
|
||||
; CHECK-LABEL: @ifconvertstore(
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: opt < %s -simplifycfg -S | FileCheck %s
|
||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s
|
||||
|
||||
; a, b;
|
||||
; fn1() {
|
||||
|
@ -1,5 +1,5 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt %s -keep-loops=false -switch-to-lookup=true -simplifycfg -S | FileCheck %s
|
||||
; RUN: opt %s -keep-loops=false -switch-to-lookup=true -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s
|
||||
; RUN: opt %s -passes='simplify-cfg<no-keep-loops;switch-to-lookup>' -S | FileCheck %s
|
||||
|
||||
define void @f6() #0 {
|
||||
|
@ -1,5 +1,5 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt < %s -simplifycfg -S | FileCheck %s
|
||||
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s
|
||||
|
||||
define i1 @qux(i8* %m, i8* %n, i8* %o, i8* %p) nounwind {
|
||||
; CHECK-LABEL: @qux(
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: opt -simplifycfg -S < %s | FileCheck %s
|
||||
; RUN: opt -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S < %s | FileCheck %s
|
||||
target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32"
|
||||
target triple = "i686-pc-win32"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user