Allow copies between GR8_ABCD_L and GR8_ABCD_H.
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Wed, 7 Jul 2010 20:33:27 +0000 (20:33 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Wed, 7 Jul 2010 20:33:27 +0000 (20:33 +0000)
This fixes PR7540.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107809 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86InstrInfo.cpp
test/CodeGen/X86/crash.ll

index c1d66cb570222a3a40eba9fc594bea530cce506b..91cec9894691363c4afa35163fd1a3dbc18d9858 100644 (file)
@@ -1913,6 +1913,9 @@ bool X86InstrInfo::copyRegToReg(MachineBasicBlock &MBB,
     else if (SrcRC->hasSuperClass(&X86::GR32RegClass) &&
              DestRC->hasSuperClass(&X86::GR32RegClass))
       CommonRC = &X86::GR32RegClass;
+    else if (SrcRC->hasSuperClass(&X86::GR8RegClass) &&
+             DestRC->hasSuperClass(&X86::GR8RegClass))
+      CommonRC = &X86::GR8RegClass;
     else
       CommonRC = 0;
   }
index 2f27f35f0acd208aa6927ab12c90e2311b41e69b..a14a48baa355043478ca4d91940fb477551a2183 100644 (file)
@@ -130,3 +130,14 @@ bb14:
 bb67:
   ret void
 }
+
+; Crash when trying to copy AH to AL.
+; PR7540
+define void @copy8bitregs() nounwind {
+entry:
+  %div.i = sdiv i32 115200, 0
+  %shr8.i = lshr i32 %div.i, 8
+  %conv4.i = trunc i32 %shr8.i to i8
+  call void asm sideeffect "outb $0, ${1:w}", "{ax},N{dx},~{dirflag},~{fpsr},~{flags}"(i8 %conv4.i, i32 1017) nounwind
+  unreachable
+}