Fix siod by switching BoolTy to byte rather than int until CFE changes for
authorNate Begeman <natebegeman@mac.com>
Fri, 13 Aug 2004 09:32:01 +0000 (09:32 +0000)
committerNate Begeman <natebegeman@mac.com>
Fri, 13 Aug 2004 09:32:01 +0000 (09:32 +0000)
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

lib/Target/PowerPC/PPC32AsmPrinter.cpp
lib/Target/PowerPC/PPC32ISelSimple.cpp
lib/Target/PowerPC/PPCAsmPrinter.cpp

index 5f3b5de7c6c9f0493907ff8bbc99fb8d0d5a2d96..4ec7b7daa97d99b5aefa099f09c9719552855498 100644 (file)
@@ -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));
index eabe9d83ad5537e8d44a55e608c27ece0762518a..e5bfb8ca5ec12e9db1ac81c9b2d4206866b147f5 100644 (file)
@@ -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);
 }
 
index 5f3b5de7c6c9f0493907ff8bbc99fb8d0d5a2d96..4ec7b7daa97d99b5aefa099f09c9719552855498 100644 (file)
@@ -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));