From e1cab9f9f19926559fb4777a4abd7d3af93000c4 Mon Sep 17 00:00:00 2001 From: Reed Kotler Date: Mon, 10 Mar 2014 16:31:25 +0000 Subject: [PATCH] Fix regression with -O0 for mips . llvm-svn: 203469 --- lib/Target/Mips/MipsTargetMachine.cpp | 12 ++++++++++ test/CodeGen/Mips/optimize-pic-o0.ll | 33 +++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 test/CodeGen/Mips/optimize-pic-o0.ll diff --git a/lib/Target/Mips/MipsTargetMachine.cpp b/lib/Target/Mips/MipsTargetMachine.cpp index 3cc1343513b..e9053c87f05 100644 --- a/lib/Target/Mips/MipsTargetMachine.cpp +++ b/lib/Target/Mips/MipsTargetMachine.cpp @@ -175,6 +175,9 @@ public: virtual bool addInstSelector(); virtual void addMachineSSAOptimization(); virtual bool addPreEmitPass(); + + virtual bool addPreRegAlloc(); + }; } // namespace @@ -208,6 +211,15 @@ void MipsPassConfig::addMachineSSAOptimization() { TargetPassConfig::addMachineSSAOptimization(); } +bool MipsPassConfig::addPreRegAlloc() { + if (getOptLevel() == CodeGenOpt::None) { + addPass(createMipsOptimizePICCallPass(getMipsTargetMachine())); + return true; + } + else + return false; +} + void MipsTargetMachine::addAnalysisPasses(PassManagerBase &PM) { if (Subtarget.allowMixed16_32()) { DEBUG(errs() << "No "); diff --git a/test/CodeGen/Mips/optimize-pic-o0.ll b/test/CodeGen/Mips/optimize-pic-o0.ll new file mode 100644 index 00000000000..554d49e728c --- /dev/null +++ b/test/CodeGen/Mips/optimize-pic-o0.ll @@ -0,0 +1,33 @@ +; RUN: llc -mtriple=mipsel -O0 < %s | FileCheck %s + +; Function Attrs: nounwind +define i32 @main() { +entry: + %retval = alloca i32, align 4 + %i = alloca i32, align 4 + store i32 0, i32* %retval + store i32 0, i32* %i, align 4 + br label %for.cond + +for.cond: ; preds = %for.inc, %entry + %0 = load i32* %i, align 4 + %cmp = icmp slt i32 %0, 10 + br i1 %cmp, label %for.body, label %for.end + +for.body: ; preds = %for.cond + call void bitcast (void (...)* @foo to void ()*)() +; CHECK: jalr $25 + br label %for.inc + +for.inc: ; preds = %for.body + %1 = load i32* %i, align 4 + %inc = add nsw i32 %1, 1 + store i32 %inc, i32* %i, align 4 + br label %for.cond + +for.end: ; preds = %for.cond + %2 = load i32* %retval + ret i32 %2 +} + +declare void @foo(...)