[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:
Craig Topper 2018-12-07 18:10:34 +00:00
parent ca8eb0b672
commit ba3ab78291
4 changed files with 38 additions and 4 deletions

View File

@ -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 &);

View File

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

View File

@ -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) {

View File

@ -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
...