[llvm-commits] CVS: llvm/lib/Target/PowerPC/PPC32ISelSimple.cpp PPC32AsmPrinter.cpp

Nate Begeman natebegeman at mac.com
Fri Aug 13 02:32:12 PDT 2004



Changes in directory llvm/lib/Target/PowerPC:

PPC32ISelSimple.cpp updated: 1.62 -> 1.63
PPC32AsmPrinter.cpp updated: 1.34 -> 1.35
---
Log message:

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.


---
Diffs of the changes:  (+28 -27)

Index: llvm/lib/Target/PowerPC/PPC32ISelSimple.cpp
diff -u llvm/lib/Target/PowerPC/PPC32ISelSimple.cpp:1.62 llvm/lib/Target/PowerPC/PPC32ISelSimple.cpp:1.63
--- llvm/lib/Target/PowerPC/PPC32ISelSimple.cpp:1.62	Thu Aug 12 23:45:14 2004
+++ llvm/lib/Target/PowerPC/PPC32ISelSimple.cpp	Fri Aug 13 04:32:01 2004
@@ -68,7 +68,7 @@
 
 // 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: llvm/lib/Target/PowerPC/PPC32AsmPrinter.cpp
diff -u llvm/lib/Target/PowerPC/PPC32AsmPrinter.cpp:1.34 llvm/lib/Target/PowerPC/PPC32AsmPrinter.cpp:1.35
--- llvm/lib/Target/PowerPC/PPC32AsmPrinter.cpp:1.34	Tue Aug 10 19:09:42 2004
+++ llvm/lib/Target/PowerPC/PPC32AsmPrinter.cpp	Fri Aug 13 04:32:01 2004
@@ -74,7 +74,7 @@
     }
 
     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 @@
 }
 
 void Printer::printOp(const MachineOperand &MO,
-                      bool elideOffsetKeyword /* = false */) {
+                      bool LoadAddrOp /* = false */) {
   const MRegisterInfo &RI = *TM.getRegisterInfo();
   int new_symbol;
   
@@ -444,31 +444,32 @@
     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 @@
   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 @@
     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));






More information about the llvm-commits mailing list