forked from OSchip/llvm-project
[X86] Initialize and Register X86CondBrFoldingPass
To make X86CondBrFoldingPass can be run with --run-pass option, this can test one wrong assertion on analyzeCompare function for SUB32ri when its operand is not imm Patch by Jianping Chen Differential Revision: https://reviews.llvm.org/D55412 llvm-svn: 348620
This commit is contained in:
parent
ca8eb0b672
commit
ba3ab78291
|
@ -143,6 +143,7 @@ void initializeWinEHStatePassPass(PassRegistry &);
|
|||
void initializeX86AvoidSFBPassPass(PassRegistry &);
|
||||
void initializeX86CallFrameOptimizationPass(PassRegistry &);
|
||||
void initializeX86CmovConverterPassPass(PassRegistry &);
|
||||
void initializeX86CondBrFoldingPassPass(PassRegistry &);
|
||||
void initializeX86DomainReassignmentPass(PassRegistry &);
|
||||
void initializeX86ExecutionDomainFixPass(PassRegistry &);
|
||||
void initializeX86FlagsCopyLoweringPassPass(PassRegistry &);
|
||||
|
|
|
@ -62,8 +62,9 @@ STATISTIC(NumFixedCondBrs, "Number of x86 condbr folded");
|
|||
namespace {
|
||||
class X86CondBrFoldingPass : public MachineFunctionPass {
|
||||
public:
|
||||
X86CondBrFoldingPass() : MachineFunctionPass(ID) {}
|
||||
|
||||
X86CondBrFoldingPass() : MachineFunctionPass(ID) {
|
||||
initializeX86CondBrFoldingPassPass(*PassRegistry::getPassRegistry());
|
||||
}
|
||||
StringRef getPassName() const override { return "X86 CondBr Folding"; }
|
||||
|
||||
bool runOnMachineFunction(MachineFunction &MF) override;
|
||||
|
@ -73,12 +74,13 @@ public:
|
|||
AU.addRequired<MachineBranchProbabilityInfo>();
|
||||
}
|
||||
|
||||
private:
|
||||
public:
|
||||
static char ID;
|
||||
};
|
||||
} // namespace
|
||||
|
||||
char X86CondBrFoldingPass::ID = 0;
|
||||
} // namespace
|
||||
INITIALIZE_PASS(X86CondBrFoldingPass, "X86CondBrFolding", "X86CondBrFolding", false, false)
|
||||
|
||||
FunctionPass *llvm::createX86CondBrFolding() {
|
||||
return new X86CondBrFoldingPass();
|
||||
|
|
|
@ -78,6 +78,7 @@ extern "C" void LLVMInitializeX86Target() {
|
|||
initializeX86AvoidSFBPassPass(PR);
|
||||
initializeX86SpeculativeLoadHardeningPassPass(PR);
|
||||
initializeX86FlagsCopyLoweringPassPass(PR);
|
||||
initializeX86CondBrFoldingPassPass(PR);
|
||||
}
|
||||
|
||||
static std::unique_ptr<TargetLoweringObjectFile> createTLOF(const Triple &TT) {
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
# XFAIL: *
|
||||
# RUN: llc -o - %s -mtriple=i686-- -mcpu=ivybridge --run-pass X86CondBrFolding | FileCheck %s
|
||||
# Test wrong assertion when meet SUB32ri with global address
|
||||
# in X86CondBrFoldingiPass
|
||||
--- |
|
||||
@img2buf_normal = external global i32
|
||||
define void @func() { ret void }
|
||||
...
|
||||
---
|
||||
# CHECK: bb.0:
|
||||
# CHECK: %2:gr32 = SUB32ri %1, @img2buf_normal, implicit-def $eflags
|
||||
|
||||
name: func
|
||||
tracksRegLiveness: true
|
||||
body: |
|
||||
bb.0:
|
||||
liveins: $edx
|
||||
%1:gr32 = COPY $edx
|
||||
%2:gr32 = MOV32rm %1:gr32, 1, $noreg, 850256, $noreg
|
||||
%3:gr32 = SUB32ri %2:gr32, @img2buf_normal, implicit-def $eflags
|
||||
JE_1 %bb.2, implicit $eflags
|
||||
JMP_1 %bb.3
|
||||
|
||||
bb.2:
|
||||
RET 0, undef $eax
|
||||
|
||||
bb.3:
|
||||
$eax = MOV32rr %3:gr32
|
||||
RET 0, $eax
|
||||
...
|
Loading…
Reference in New Issue