Don't clear or sign extend bool->int. This fires a few dozen times on the test suite
authorNate Begeman <natebegeman@mac.com>
Wed, 20 Oct 2004 21:55:41 +0000 (21:55 +0000)
committerNate Begeman <natebegeman@mac.com>
Wed, 20 Oct 2004 21:55:41 +0000 (21:55 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17147 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PowerPC/PPC32ISelSimple.cpp

index b0f56da4a7ef1ab9776f67b2fa0b5ad3e3aa0636..3adce5d83d5b595059016edbd3faa08575fa43f0 100644 (file)
@@ -3048,6 +3048,23 @@ void PPC32ISel::emitCastOperation(MachineBasicBlock *MBB,
   unsigned DestClass = getClassB(DestTy);
   unsigned SrcReg = getReg(Src, MBB, IP);
 
+  // Implement casts from bool to integer types as a move operation
+  if (SrcTy == Type::BoolTy) {
+    switch (DestClass) {
+    case cByte:
+    case cShort:
+    case cInt:
+      BuildMI(*MBB, IP, PPC::OR, 2, DestReg).addReg(SrcReg).addReg(SrcReg);
+      return;
+    case cLong:
+      BuildMI(*MBB, IP, PPC::LI, 1, DestReg).addImm(0);
+      BuildMI(*MBB, IP, PPC::OR, 2, DestReg+1).addReg(SrcReg).addReg(SrcReg);
+      return;
+    default:
+      break;
+    }
+  }
+
   // Implement casts to bool by using compare on the operand followed by set if
   // not zero on the result.
   if (DestTy == Type::BoolTy) {