projects
/
oota-llvm.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[WebAssembly] Register the MC subtarget info.
[oota-llvm.git]
/
lib
/
CodeGen
/
ProcessImplicitDefs.cpp
diff --git
a/lib/CodeGen/ProcessImplicitDefs.cpp
b/lib/CodeGen/ProcessImplicitDefs.cpp
index 0c5173aeadcb4ec0f088ed6bc6e585435660f991..d27ea2f51867a60353328703ee901bd47dd338df 100644
(file)
--- a/
lib/CodeGen/ProcessImplicitDefs.cpp
+++ b/
lib/CodeGen/ProcessImplicitDefs.cpp
@@
-7,8
+7,6
@@
//
//===----------------------------------------------------------------------===//
//
//===----------------------------------------------------------------------===//
-#define DEBUG_TYPE "processimplicitdefs"
-
#include "llvm/ADT/SetVector.h"
#include "llvm/Analysis/AliasAnalysis.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/Analysis/AliasAnalysis.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
@@
-18,9
+16,12
@@
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Target/TargetInstrInfo.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Target/TargetInstrInfo.h"
+#include "llvm/Target/TargetSubtargetInfo.h"
using namespace llvm;
using namespace llvm;
+#define DEBUG_TYPE "processimplicitdefs"
+
namespace {
/// Process IMPLICIT_DEF instructions and make sure there is one implicit_def
/// for each use. Add isUndef marker to implicit_def defs and their uses.
namespace {
/// Process IMPLICIT_DEF instructions and make sure there is one implicit_def
/// for each use. Add isUndef marker to implicit_def defs and their uses.
@@
-41,9
+42,9
@@
public:
initializeProcessImplicitDefsPass(*PassRegistry::getPassRegistry());
}
initializeProcessImplicitDefsPass(*PassRegistry::getPassRegistry());
}
- v
irtual void getAnalysisUsage(AnalysisUsage &au) const
;
+ v
oid getAnalysisUsage(AnalysisUsage &au) const override
;
-
virtual bool runOnMachineFunction(MachineFunction &fn)
;
+
bool runOnMachineFunction(MachineFunction &fn) override
;
};
} // end anonymous namespace
};
} // end anonymous namespace
@@
-57,7
+58,7
@@
INITIALIZE_PASS_END(ProcessImplicitDefs, "processimpdefs",
void ProcessImplicitDefs::getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesCFG();
void ProcessImplicitDefs::getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesCFG();
- AU.addPreserved<A
liasAnalysi
s>();
+ AU.addPreserved<A
AResultsWrapperPas
s>();
MachineFunctionPass::getAnalysisUsage(AU);
}
MachineFunctionPass::getAnalysisUsage(AU);
}
@@
-67,8
+68,8
@@
bool ProcessImplicitDefs::canTurnIntoImplicitDef(MachineInstr *MI) {
!MI->isRegSequence() &&
!MI->isPHI())
return false;
!MI->isRegSequence() &&
!MI->isPHI())
return false;
- for (
MIOperands MO(MI); MO.isValid(); ++MO
)
- if (MO
->isReg() && MO->isUse() && MO->
readsReg())
+ for (
const MachineOperand &MO : MI->operands()
)
+ if (MO
.isReg() && MO.isUse() && MO.
readsReg())
return false;
return true;
}
return false;
return true;
}
@@
-80,10
+81,7
@@
void ProcessImplicitDefs::processImplicitDef(MachineInstr *MI) {
if (TargetRegisterInfo::isVirtualRegister(Reg)) {
// For virtual registers, mark all uses as <undef>, and convert users to
// implicit-def when possible.
if (TargetRegisterInfo::isVirtualRegister(Reg)) {
// For virtual registers, mark all uses as <undef>, and convert users to
// implicit-def when possible.
- for (MachineRegisterInfo::use_nodbg_iterator UI =
- MRI->use_nodbg_begin(Reg),
- UE = MRI->use_nodbg_end(); UI != UE; ++UI) {
- MachineOperand &MO = UI.getOperand();
+ for (MachineOperand &MO : MRI->use_nodbg_operands(Reg)) {
MO.setIsUndef();
MachineInstr *UserMI = MO.getParent();
if (!canTurnIntoImplicitDef(UserMI))
MO.setIsUndef();
MachineInstr *UserMI = MO.getParent();
if (!canTurnIntoImplicitDef(UserMI))
@@
-98,21
+96,21
@@
void ProcessImplicitDefs::processImplicitDef(MachineInstr *MI) {
// This is a physreg implicit-def.
// Look for the first instruction to use or define an alias.
// This is a physreg implicit-def.
// Look for the first instruction to use or define an alias.
- MachineBasicBlock::instr_iterator UserMI = MI;
+ MachineBasicBlock::instr_iterator UserMI = MI
->getIterator()
;
MachineBasicBlock::instr_iterator UserE = MI->getParent()->instr_end();
bool Found = false;
for (++UserMI; UserMI != UserE; ++UserMI) {
MachineBasicBlock::instr_iterator UserE = MI->getParent()->instr_end();
bool Found = false;
for (++UserMI; UserMI != UserE; ++UserMI) {
- for (M
IOperands MO(UserMI); MO.isValid(); ++MO
) {
- if (!MO
->
isReg())
+ for (M
achineOperand &MO : UserMI->operands()
) {
+ if (!MO
.
isReg())
continue;
continue;
- unsigned UserReg = MO
->
getReg();
+ unsigned UserReg = MO
.
getReg();
if (!TargetRegisterInfo::isPhysicalRegister(UserReg) ||
!TRI->regsOverlap(Reg, UserReg))
continue;
// UserMI uses or redefines Reg. Set <undef> flags on all uses.
Found = true;
if (!TargetRegisterInfo::isPhysicalRegister(UserReg) ||
!TRI->regsOverlap(Reg, UserReg))
continue;
// UserMI uses or redefines Reg. Set <undef> flags on all uses.
Found = true;
- if (MO
->
isUse())
- MO
->
setIsUndef();
+ if (MO
.
isUse())
+ MO
.
setIsUndef();
}
if (Found)
break;
}
if (Found)
break;
@@
-141,8
+139,8
@@
bool ProcessImplicitDefs::runOnMachineFunction(MachineFunction &MF) {
bool Changed = false;
bool Changed = false;
- TII = MF.get
T
arget().getInstrInfo();
- TRI = MF.get
T
arget().getRegisterInfo();
+ TII = MF.get
Subt
arget().getInstrInfo();
+ TRI = MF.get
Subt
arget().getRegisterInfo();
MRI = &MF.getRegInfo();
assert(MRI->isSSA() && "ProcessImplicitDefs only works on SSA form.");
assert(WorkList.empty() && "Inconsistent worklist state");
MRI = &MF.getRegInfo();
assert(MRI->isSSA() && "ProcessImplicitDefs only works on SSA form.");
assert(WorkList.empty() && "Inconsistent worklist state");
@@
-153,7
+151,7
@@
bool ProcessImplicitDefs::runOnMachineFunction(MachineFunction &MF) {
for (MachineBasicBlock::instr_iterator MBBI = MFI->instr_begin(),
MBBE = MFI->instr_end(); MBBI != MBBE; ++MBBI)
if (MBBI->isImplicitDef())
for (MachineBasicBlock::instr_iterator MBBI = MFI->instr_begin(),
MBBE = MFI->instr_end(); MBBI != MBBE; ++MBBI)
if (MBBI->isImplicitDef())
- WorkList.insert(MBBI);
+ WorkList.insert(
&*
MBBI);
if (WorkList.empty())
continue;
if (WorkList.empty())
continue;