[llvm] r254315 - [X86] Add RIP to GR64_TCW64
David Majnemer via llvm-commits
llvm-commits at lists.llvm.org
Mon Nov 30 11:04:20 PST 2015
Author: majnemer
Date: Mon Nov 30 13:04:19 2015
New Revision: 254315
URL: http://llvm.org/viewvc/llvm-project?rev=254315&view=rev
Log:
[X86] Add RIP to GR64_TCW64
The MachineVerifier wants to check that the register operands of an
instruction belong to the instruction's register class. RIP-relative
control flow instructions violated this by referencing RIP. While this
was fixed for SysV, it was never fixed for Win64.
Added:
llvm/trunk/test/CodeGen/X86/coalescer-win64.ll
Modified:
llvm/trunk/lib/Target/X86/X86RegisterInfo.td
llvm/trunk/test/CodeGen/X86/x86-shrink-wrapping.ll
Modified: llvm/trunk/lib/Target/X86/X86RegisterInfo.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86RegisterInfo.td?rev=254315&r1=254314&r2=254315&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86RegisterInfo.td (original)
+++ llvm/trunk/lib/Target/X86/X86RegisterInfo.td Mon Nov 30 13:04:19 2015
@@ -375,7 +375,7 @@ def GR32_TC : RegisterClass<"X86", [i3
def GR64_TC : RegisterClass<"X86", [i64], 64, (add RAX, RCX, RDX, RSI, RDI,
R8, R9, R11, RIP)>;
def GR64_TCW64 : RegisterClass<"X86", [i64], 64, (add RAX, RCX, RDX,
- R8, R9, R10, R11)>;
+ R8, R9, R10, R11, RIP)>;
// GR8_NOREX - GR8 registers which do not require a REX prefix.
def GR8_NOREX : RegisterClass<"X86", [i8], 8,
Added: llvm/trunk/test/CodeGen/X86/coalescer-win64.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/coalescer-win64.ll?rev=254315&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/coalescer-win64.ll (added)
+++ llvm/trunk/test/CodeGen/X86/coalescer-win64.ll Mon Nov 30 13:04:19 2015
@@ -0,0 +1,16 @@
+; RUN: llc < %s -verify-coalescing | FileCheck %s
+target triple = "x86_64-pc-win32"
+
+ at fnptr = external global void ()*
+
+define void @test1() {
+entry:
+ %p = load void ()*, void ()** @fnptr
+ tail call void %p()
+ ret void
+}
+
+; CHECK-LABEL: test1{{$}}
+; CHECK: .seh_proc test1{{$}}
+; CHECK: rex64 jmpq *fnptr(%rip)
+; CHECK: .seh_endproc
Modified: llvm/trunk/test/CodeGen/X86/x86-shrink-wrapping.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/x86-shrink-wrapping.ll?rev=254315&r1=254314&r2=254315&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/x86-shrink-wrapping.ll (original)
+++ llvm/trunk/test/CodeGen/X86/x86-shrink-wrapping.ll Mon Nov 30 13:04:19 2015
@@ -445,9 +445,9 @@ if.end:
; CHECK-NEXT: xorl %eax, %eax
; CHECK-NEXT: %esi, %edi
; CHECK-NEXT: %esi, %edx
+; CHECK-NEXT: %esi, %ecx
; CHECK-NEXT: %esi, %r8d
; CHECK-NEXT: %esi, %r9d
-; CHECK-NEXT: %esi, %ecx
; CHECK-NEXT: callq _someVariadicFunc
; CHECK-NEXT: movl %eax, %esi
; CHECK-NEXT: shll $3, %esi
More information about the llvm-commits
mailing list