aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNate Begeman <natebegeman@mac.com>2004-08-13 09:32:01 +0000
committerNate Begeman <natebegeman@mac.com>2004-08-13 09:32:01 +0000
commitb73a711ed7c1da332ae8d22b0defcbdf0411d1a4 (patch)
tree56578a82ad305d5887aa06907b43de70d02464bd
parent293d88ca8b776f6c8b0d36375458602cb2ae67d5 (diff)
downloadexternal_llvm-b73a711ed7c1da332ae8d22b0defcbdf0411d1a4.tar.gz
external_llvm-b73a711ed7c1da332ae8d22b0defcbdf0411d1a4.tar.bz2
external_llvm-b73a711ed7c1da332ae8d22b0defcbdf0411d1a4.zip
Fix siod by switching BoolTy to byte rather than int until CFE changes for
Darwin. Also, change asm printer to output proper stubs for external functions whose address is passed as an argument to aid in bugpointing. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15721 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/PowerPC/PPC32AsmPrinter.cpp53
-rw-r--r--lib/Target/PowerPC/PPC32ISelSimple.cpp2
-rw-r--r--lib/Target/PowerPC/PPCAsmPrinter.cpp53
3 files changed, 55 insertions, 53 deletions
diff --git a/lib/Target/PowerPC/PPC32AsmPrinter.cpp b/lib/Target/PowerPC/PPC32AsmPrinter.cpp
index 5f3b5de7c6..4ec7b7daa9 100644
--- a/lib/Target/PowerPC/PPC32AsmPrinter.cpp
+++ b/lib/Target/PowerPC/PPC32AsmPrinter.cpp
@@ -74,7 +74,7 @@ namespace {
}
void printMachineInstruction(const MachineInstr *MI);
- void printOp(const MachineOperand &MO, bool elideOffsetKeyword = false);
+ void printOp(const MachineOperand &MO, bool LoadAddrOp = false);
void printImmOp(const MachineOperand &MO, unsigned ArgType);
void printConstantPool(MachineConstantPool *MCP);
bool runOnMachineFunction(MachineFunction &F);
@@ -401,7 +401,7 @@ bool Printer::runOnMachineFunction(MachineFunction &MF) {
}
void Printer::printOp(const MachineOperand &MO,
- bool elideOffsetKeyword /* = false */) {
+ bool LoadAddrOp /* = false */) {
const MRegisterInfo &RI = *TM.getRegisterInfo();
int new_symbol;
@@ -444,31 +444,32 @@ void Printer::printOp(const MachineOperand &MO,
O << MO.getSymbolName();
return;
- case MachineOperand::MO_GlobalAddress:
- if (!elideOffsetKeyword) {
- GlobalValue *GV = MO.getGlobal();
- std::string Name = Mang->getValueName(GV);
-
- // Dynamically-resolved functions need a stub for the function
- Function *F = dyn_cast<Function>(GV);
- if (F && F->isExternal() &&
- TM.CalledFunctions.find(F) != TM.CalledFunctions.end()) {
- FnStubs.insert(Name);
- O << "L" << Name << "$stub";
- return;
- }
-
- // External global variables need a non-lazily-resolved stub
- if (!GV->hasInternalLinkage() &&
- TM.AddressTaken.find(GV) != TM.AddressTaken.end()) {
- GVStubs.insert(Name);
- O << "L" << Name << "$non_lazy_ptr";
- return;
- }
+ case MachineOperand::MO_GlobalAddress: {
+ GlobalValue *GV = MO.getGlobal();
+ std::string Name = Mang->getValueName(GV);
+
+ // Dynamically-resolved functions need a stub for the function. Be
+ // wary however not to output $stub for external functions whose addresses
+ // are taken. Those should be emitted as $non_lazy_ptr below.
+ Function *F = dyn_cast<Function>(GV);
+ if (F && F->isExternal() && !LoadAddrOp &&
+ TM.CalledFunctions.find(F) != TM.CalledFunctions.end()) {
+ FnStubs.insert(Name);
+ O << "L" << Name << "$stub";
+ return;
+ }
- O << Mang->getValueName(GV);
+ // External global variables need a non-lazily-resolved stub
+ if (!GV->hasInternalLinkage() &&
+ TM.AddressTaken.find(GV) != TM.AddressTaken.end()) {
+ GVStubs.insert(Name);
+ O << "L" << Name << "$non_lazy_ptr";
+ return;
}
+
+ O << Mang->getValueName(GV);
return;
+ }
default:
O << "<unknown operand type: " << MO.getType() << ">";
@@ -548,7 +549,7 @@ void Printer::printMachineInstruction(const MachineInstr *MI) {
if (Opcode == PPC::LOADLoDirect || Opcode == PPC::LOADLoIndirect) {
printOp(MI->getOperand(0));
O << ", lo16(";
- printOp(MI->getOperand(2));
+ printOp(MI->getOperand(2), true /* LoadAddrOp */);
O << "-\"L0000" << LabelNumber << "$pb\")";
O << "(";
if (MI->getOperand(1).getReg() == PPC::R0)
@@ -564,7 +565,7 @@ void Printer::printMachineInstruction(const MachineInstr *MI) {
else
printOp(MI->getOperand(1));
O << ", ha16(" ;
- printOp(MI->getOperand(2));
+ printOp(MI->getOperand(2), true /* LoadAddrOp */);
O << "-\"L0000" << LabelNumber << "$pb\")\n";
} else if (ArgCount == 3 && ArgType[1] == PPCII::Disimm16) {
printOp(MI->getOperand(0));
diff --git a/lib/Target/PowerPC/PPC32ISelSimple.cpp b/lib/Target/PowerPC/PPC32ISelSimple.cpp
index eabe9d83ad..e5bfb8ca5e 100644
--- a/lib/Target/PowerPC/PPC32ISelSimple.cpp
+++ b/lib/Target/PowerPC/PPC32ISelSimple.cpp
@@ -68,7 +68,7 @@ static inline TypeClass getClass(const Type *Ty) {
// getClassB - Just like getClass, but treat boolean values as ints.
static inline TypeClass getClassB(const Type *Ty) {
- if (Ty == Type::BoolTy) return cInt;
+ if (Ty == Type::BoolTy) return cByte;
return getClass(Ty);
}
diff --git a/lib/Target/PowerPC/PPCAsmPrinter.cpp b/lib/Target/PowerPC/PPCAsmPrinter.cpp
index 5f3b5de7c6..4ec7b7daa9 100644
--- a/lib/Target/PowerPC/PPCAsmPrinter.cpp
+++ b/lib/Target/PowerPC/PPCAsmPrinter.cpp
@@ -74,7 +74,7 @@ namespace {
}
void printMachineInstruction(const MachineInstr *MI);
- void printOp(const MachineOperand &MO, bool elideOffsetKeyword = false);
+ void printOp(const MachineOperand &MO, bool LoadAddrOp = false);
void printImmOp(const MachineOperand &MO, unsigned ArgType);
void printConstantPool(MachineConstantPool *MCP);
bool runOnMachineFunction(MachineFunction &F);
@@ -401,7 +401,7 @@ bool Printer::runOnMachineFunction(MachineFunction &MF) {
}
void Printer::printOp(const MachineOperand &MO,
- bool elideOffsetKeyword /* = false */) {
+ bool LoadAddrOp /* = false */) {
const MRegisterInfo &RI = *TM.getRegisterInfo();
int new_symbol;
@@ -444,31 +444,32 @@ void Printer::printOp(const MachineOperand &MO,
O << MO.getSymbolName();
return;
- case MachineOperand::MO_GlobalAddress:
- if (!elideOffsetKeyword) {
- GlobalValue *GV = MO.getGlobal();
- std::string Name = Mang->getValueName(GV);
-
- // Dynamically-resolved functions need a stub for the function
- Function *F = dyn_cast<Function>(GV);
- if (F && F->isExternal() &&
- TM.CalledFunctions.find(F) != TM.CalledFunctions.end()) {
- FnStubs.insert(Name);
- O << "L" << Name << "$stub";
- return;
- }
-
- // External global variables need a non-lazily-resolved stub
- if (!GV->hasInternalLinkage() &&
- TM.AddressTaken.find(GV) != TM.AddressTaken.end()) {
- GVStubs.insert(Name);
- O << "L" << Name << "$non_lazy_ptr";
- return;
- }
+ case MachineOperand::MO_GlobalAddress: {
+ GlobalValue *GV = MO.getGlobal();
+ std::string Name = Mang->getValueName(GV);
+
+ // Dynamically-resolved functions need a stub for the function. Be
+ // wary however not to output $stub for external functions whose addresses
+ // are taken. Those should be emitted as $non_lazy_ptr below.
+ Function *F = dyn_cast<Function>(GV);
+ if (F && F->isExternal() && !LoadAddrOp &&
+ TM.CalledFunctions.find(F) != TM.CalledFunctions.end()) {
+ FnStubs.insert(Name);
+ O << "L" << Name << "$stub";
+ return;
+ }
- O << Mang->getValueName(GV);
+ // External global variables need a non-lazily-resolved stub
+ if (!GV->hasInternalLinkage() &&
+ TM.AddressTaken.find(GV) != TM.AddressTaken.end()) {
+ GVStubs.insert(Name);
+ O << "L" << Name << "$non_lazy_ptr";
+ return;
}
+
+ O << Mang->getValueName(GV);
return;
+ }
default:
O << "<unknown operand type: " << MO.getType() << ">";
@@ -548,7 +549,7 @@ void Printer::printMachineInstruction(const MachineInstr *MI) {
if (Opcode == PPC::LOADLoDirect || Opcode == PPC::LOADLoIndirect) {
printOp(MI->getOperand(0));
O << ", lo16(";
- printOp(MI->getOperand(2));
+ printOp(MI->getOperand(2), true /* LoadAddrOp */);
O << "-\"L0000" << LabelNumber << "$pb\")";
O << "(";
if (MI->getOperand(1).getReg() == PPC::R0)
@@ -564,7 +565,7 @@ void Printer::printMachineInstruction(const MachineInstr *MI) {
else
printOp(MI->getOperand(1));
O << ", ha16(" ;
- printOp(MI->getOperand(2));
+ printOp(MI->getOperand(2), true /* LoadAddrOp */);
O << "-\"L0000" << LabelNumber << "$pb\")\n";
} else if (ArgCount == 3 && ArgType[1] == PPCII::Disimm16) {
printOp(MI->getOperand(0));