[PATCH] D37801: [x86] fix pr29061
coby via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sun Sep 17 00:26:30 PDT 2017
coby updated this revision to Diff 115562.
coby added a comment.
addressed Simon's comment
Repository:
rL LLVM
https://reviews.llvm.org/D37801
Files:
lib/Target/X86/X86ISelLowering.cpp
test/CodeGen/X86/pr29061.ll
Index: lib/Target/X86/X86ISelLowering.cpp
===================================================================
--- lib/Target/X86/X86ISelLowering.cpp
+++ lib/Target/X86/X86ISelLowering.cpp
@@ -36816,12 +36816,14 @@
if (Size == 1) Size = 8;
unsigned DestReg = getX86SubSuperRegisterOrZero(Res.first, Size);
if (DestReg > 0) {
- Res.first = DestReg;
- Res.second = Size == 8 ? &X86::GR8RegClass
- : Size == 16 ? &X86::GR16RegClass
- : Size == 32 ? &X86::GR32RegClass
- : &X86::GR64RegClass;
- assert(Res.second->contains(Res.first) && "Register in register class");
+ bool is64Bit = Subtarget.is64Bit();
+ const TargetRegisterClass *RC =
+ Size == 8 ? (is64Bit ? &X86::GR8RegClass : &X86::GR8_NOREXRegClass)
+ : Size == 16 ? (is64Bit ? &X86::GR16RegClass : &X86::GR16_NOREXRegClass)
+ : Size == 32 ? (is64Bit ? &X86::GR32RegClass : &X86::GR32_NOREXRegClass)
+ : &X86::GR64RegClass;
+ if (RC->contains(DestReg))
+ Res = std::make_pair(DestReg, RC);
} else {
// No register found/type mismatch.
Res.first = 0;
Index: test/CodeGen/X86/pr29061.ll
===================================================================
--- test/CodeGen/X86/pr29061.ll
+++ test/CodeGen/X86/pr29061.ll
@@ -0,0 +1,44 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc -mtriple i386-unknown-linux-gnu < %s | FileCheck %s
+
+; Previously, a reference to SIL/DIL was being emitted
+; but those aren't available unless on a 64bit mode
+
+define void @t1(i8 signext %c) {
+; CHECK-LABEL: t1:
+; CHECK: # BB#0: # %entry
+; CHECK-NEXT: pushl %edi
+; CHECK-NEXT: .Lcfi0:
+; CHECK-NEXT: .cfi_def_cfa_offset 8
+; CHECK-NEXT: .Lcfi1:
+; CHECK-NEXT: .cfi_offset %edi, -8
+; CHECK-NEXT: movzbl {{[0-9]+}}(%esp), %edi
+; CHECK-NEXT: # kill: %DI<def> %DI<kill> %EDI<kill>
+; CHECK-NEXT: #APP
+; CHECK-NEXT: #NO_APP
+; CHECK-NEXT: popl %edi
+; CHECK-NEXT: retl
+entry:
+ tail call void asm sideeffect "", "{di},~{dirflag},~{fpsr},~{flags}"(i8 %c)
+ ret void
+}
+
+define void @t2(i8 signext %c) {
+; CHECK-LABEL: t2:
+; CHECK: # BB#0: # %entry
+; CHECK-NEXT: pushl %esi
+; CHECK-NEXT: .Lcfi2:
+; CHECK-NEXT: .cfi_def_cfa_offset 8
+; CHECK-NEXT: .Lcfi3:
+; CHECK-NEXT: .cfi_offset %esi, -8
+; CHECK-NEXT: movzbl {{[0-9]+}}(%esp), %esi
+; CHECK-NEXT: # kill: %SI<def> %SI<kill> %ESI<kill>
+; CHECK-NEXT: #APP
+; CHECK-NEXT: #NO_APP
+; CHECK-NEXT: popl %esi
+; CHECK-NEXT: retl
+entry:
+ tail call void asm sideeffect "", "{si},~{dirflag},~{fpsr},~{flags}"(i8 %c)
+ ret void
+}
+
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D37801.115562.patch
Type: text/x-patch
Size: 2696 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170917/fd0b9d6d/attachment.bin>
More information about the llvm-commits
mailing list