[llvm-commits] [llvm] r89510 - in /llvm/trunk: lib/CodeGen/MachineLICM.cpp test/CodeGen/Thumb2/machine-licm.ll test/CodeGen/X86/2009-10-08-MachineLICMBug.ll test/CodeGen/X86/pic-load-remat.ll
Evan Cheng
evan.cheng at apple.com
Fri Nov 20 15:31:34 PST 2009
Author: evancheng
Date: Fri Nov 20 17:31:34 2009
New Revision: 89510
URL: http://llvm.org/viewvc/llvm-project?rev=89510&view=rev
Log:
Enable hoisting load from constant memories.
Modified:
llvm/trunk/lib/CodeGen/MachineLICM.cpp
llvm/trunk/test/CodeGen/Thumb2/machine-licm.ll
llvm/trunk/test/CodeGen/X86/2009-10-08-MachineLICMBug.ll
llvm/trunk/test/CodeGen/X86/pic-load-remat.ll
Modified: llvm/trunk/lib/CodeGen/MachineLICM.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineLICM.cpp?rev=89510&r1=89509&r2=89510&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/MachineLICM.cpp (original)
+++ llvm/trunk/lib/CodeGen/MachineLICM.cpp Fri Nov 20 17:31:34 2009
@@ -34,16 +34,11 @@
#include "llvm/Analysis/AliasAnalysis.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/Statistic.h"
-#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
using namespace llvm;
-static cl::opt<bool> HoistLdConst("licm-const-load",
- cl::desc("LICM load from constant memory"),
- cl::init(false), cl::Hidden);
-
STATISTIC(NumHoisted, "Number of machine instructions hoisted out of loops");
STATISTIC(NumCSEed, "Number of hoisted machine instructions CSEed");
@@ -102,7 +97,7 @@
/// IsProfitableToHoist - Return true if it is potentially profitable to
/// hoist the given loop invariant.
- bool IsProfitableToHoist(MachineInstr &MI, bool &isConstLd);
+ bool IsProfitableToHoist(MachineInstr &MI);
/// HoistRegion - Walk the specified region of the CFG (defined by all
/// blocks dominated by the specified block, and that are in the current
@@ -367,9 +362,7 @@
/// IsProfitableToHoist - Return true if it is potentially profitable to hoist
/// the given loop invariant.
-bool MachineLICM::IsProfitableToHoist(MachineInstr &MI, bool &isConstLd) {
- isConstLd = false;
-
+bool MachineLICM::IsProfitableToHoist(MachineInstr &MI) {
if (MI.getOpcode() == TargetInstrInfo::IMPLICIT_DEF)
return false;
@@ -382,9 +375,8 @@
// adding a store in the loop preheader. But the reload is no more expensive.
// The side benefit is these loads are frequently CSE'ed.
if (!TII->isTriviallyReMaterializable(&MI, AA)) {
- if (!HoistLdConst || !isLoadFromConstantMemory(&MI))
+ if (!isLoadFromConstantMemory(&MI))
return false;
- isConstLd = true;
}
// If result(s) of this instruction is used by PHIs, then don't hoist it.
@@ -439,9 +431,7 @@
MBB->insert(MI, NewMIs[1]);
// If unfolding produced a load that wasn't loop-invariant or profitable to
// hoist, discard the new instructions and bail.
- bool isConstLd;
- if (!IsLoopInvariantInst(*NewMIs[0]) ||
- !IsProfitableToHoist(*NewMIs[0], isConstLd)) {
+ if (!IsLoopInvariantInst(*NewMIs[0]) || !IsProfitableToHoist(*NewMIs[0])) {
NewMIs[0]->eraseFromParent();
NewMIs[1]->eraseFromParent();
return 0;
@@ -507,9 +497,7 @@
///
void MachineLICM::Hoist(MachineInstr *MI) {
// First check whether we should hoist this instruction.
- bool isConstLd;
- if (!IsLoopInvariantInst(*MI) ||
- !IsProfitableToHoist(*MI, isConstLd)) {
+ if (!IsLoopInvariantInst(*MI) || !IsProfitableToHoist(*MI)) {
// If not, try unfolding a hoistable load.
MI = ExtractHoistableLoad(MI);
if (!MI) return;
@@ -518,10 +506,7 @@
// Now move the instructions to the predecessor, inserting it before any
// terminator instructions.
DEBUG({
- errs() << "Hoisting ";
- if (isConstLd)
- errs() << "load from constant mem ";
- errs() << *MI;
+ errs() << "Hoisting " << *MI;
if (CurPreheader->getBasicBlock())
errs() << " to MachineBasicBlock "
<< CurPreheader->getName();
Modified: llvm/trunk/test/CodeGen/Thumb2/machine-licm.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Thumb2/machine-licm.ll?rev=89510&r1=89509&r2=89510&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/Thumb2/machine-licm.ll (original)
+++ llvm/trunk/test/CodeGen/Thumb2/machine-licm.ll Fri Nov 20 17:31:34 2009
@@ -18,7 +18,9 @@
bb.nph: ; preds = %entry
; CHECK: BB#1
; CHECK: ldr.n r2, LCPI1_0
-; CHECK: ldr r{{[0-9]+}}, [r2]
+; CHECK: ldr r3, [r2]
+; CHECK: ldr r3, [r3]
+; CHECK: ldr r2, [r2]
; CHECK: LBB1_2
; CHECK: LCPI1_0:
; CHECK-NOT: LCPI1_1:
@@ -27,7 +29,9 @@
; PIC: BB#1
; PIC: ldr.n r2, LCPI1_0
; PIC: add r2, pc
-; PIC: ldr r{{[0-9]+}}, [r2]
+; PIC: ldr r3, [r2]
+; PIC: ldr r3, [r3]
+; PIC: ldr r2, [r2]
; PIC: LBB1_2
; PIC: LCPI1_0:
; PIC-NOT: LCPI1_1:
Modified: llvm/trunk/test/CodeGen/X86/2009-10-08-MachineLICMBug.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2009-10-08-MachineLICMBug.ll?rev=89510&r1=89509&r2=89510&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/2009-10-08-MachineLICMBug.ll (original)
+++ llvm/trunk/test/CodeGen/X86/2009-10-08-MachineLICMBug.ll Fri Nov 20 17:31:34 2009
@@ -1,4 +1,4 @@
-; RUN: llc < %s -mtriple=i386-apple-darwin -relocation-model=pic -stats |& grep {machine-licm} | grep 1
+; RUN: llc < %s -mtriple=i386-apple-darwin -relocation-model=pic -stats |& grep {machine-licm} | grep 2
; rdar://7274692
%0 = type { [125 x i32] }
Modified: llvm/trunk/test/CodeGen/X86/pic-load-remat.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/pic-load-remat.ll?rev=89510&r1=89509&r2=89510&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/pic-load-remat.ll (original)
+++ llvm/trunk/test/CodeGen/X86/pic-load-remat.ll Fri Nov 20 17:31:34 2009
@@ -1,10 +1,4 @@
; RUN: llc < %s -mtriple=i686-apple-darwin -mattr=+sse2 -relocation-model=pic | grep psllw | grep pb
-; XFAIL: *
-
-; This is XFAIL'd because MachineLICM is now hoisting all of the loads, and the pic
-; base appears killed in the entry block when remat is making its decisions. Remat's
-; simple heuristic decides against rematting because it doesn't want to extend the
-; live-range of the pic base; this isn't necessarily optimal.
define void @f() nounwind {
entry:
More information about the llvm-commits
mailing list