+++ /dev/null
-// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux %s -o - | llvm-readobj -r - | FileCheck %s
-
-// these should produce R_X86_64_REX_GOTPCRELX
-
- movq mov@GOTPCREL(%rip), %rax
- test %rax, test@GOTPCREL(%rip)
- adc adc@GOTPCREL(%rip), %rax
- add add@GOTPCREL(%rip), %rax
- and and@GOTPCREL(%rip), %rax
- cmp cmp@GOTPCREL(%rip), %rax
- or or@GOTPCREL(%rip), %rax
- sbb sbb@GOTPCREL(%rip), %rax
- sub sub@GOTPCREL(%rip), %rax
- xor xor@GOTPCREL(%rip), %rax
-
-.section .norelax,"ax"
-## This expression loads the GOT entry with an offset.
-## Don't emit R_X86_64_REX_GOTPCRELX.
- movq mov@GOTPCREL+1(%rip), %rax
-
-// CHECK: Relocations [
-// CHECK-NEXT: Section ({{.*}}) .rela.text {
-// CHECK-NEXT: R_X86_64_REX_GOTPCRELX mov
-// CHECK-NEXT: R_X86_64_REX_GOTPCRELX test
-// CHECK-NEXT: R_X86_64_REX_GOTPCRELX adc
-// CHECK-NEXT: R_X86_64_REX_GOTPCRELX add
-// CHECK-NEXT: R_X86_64_REX_GOTPCRELX and
-// CHECK-NEXT: R_X86_64_REX_GOTPCRELX cmp
-// CHECK-NEXT: R_X86_64_REX_GOTPCRELX or
-// CHECK-NEXT: R_X86_64_REX_GOTPCRELX sbb
-// CHECK-NEXT: R_X86_64_REX_GOTPCRELX sub
-// CHECK-NEXT: R_X86_64_REX_GOTPCRELX xor
-// CHECK-NEXT: }
-// CHECK-NEXT: Section ({{.*}}) .rela.norelax {
-// CHECK-NEXT: R_X86_64_GOTPCREL mov
-// CHECK-NEXT: }
# CHECK-NEXT: R_X86_64_GOTPCRELX xor
# CHECK-NEXT: R_X86_64_GOTPCRELX call
# CHECK-NEXT: R_X86_64_GOTPCRELX jmp
+# CHECK-NEXT: R_X86_64_REX_GOTPCRELX mov
+# CHECK-NEXT: R_X86_64_REX_GOTPCRELX test
+# CHECK-NEXT: R_X86_64_REX_GOTPCRELX adc
+# CHECK-NEXT: R_X86_64_REX_GOTPCRELX add
+# CHECK-NEXT: R_X86_64_REX_GOTPCRELX and
+# CHECK-NEXT: R_X86_64_REX_GOTPCRELX cmp
+# CHECK-NEXT: R_X86_64_REX_GOTPCRELX or
+# CHECK-NEXT: R_X86_64_REX_GOTPCRELX sbb
+# CHECK-NEXT: R_X86_64_REX_GOTPCRELX sub
+# CHECK-NEXT: R_X86_64_REX_GOTPCRELX xor
+# CHECK-NEXT: R_X86_64_REX_GOTPCRELX mov
+# CHECK-NEXT: R_X86_64_REX_GOTPCRELX test
+# CHECK-NEXT: R_X86_64_REX_GOTPCRELX adc
+# CHECK-NEXT: R_X86_64_REX_GOTPCRELX add
+# CHECK-NEXT: R_X86_64_REX_GOTPCRELX and
+# CHECK-NEXT: R_X86_64_REX_GOTPCRELX cmp
+# CHECK-NEXT: R_X86_64_REX_GOTPCRELX or
+# CHECK-NEXT: R_X86_64_REX_GOTPCRELX sbb
+# CHECK-NEXT: R_X86_64_REX_GOTPCRELX sub
+# CHECK-NEXT: R_X86_64_REX_GOTPCRELX xor
# CHECK-NEXT: }
# NORELAX-NEXT: R_X86_64_GOTPCREL mov
# NORELAX-NEXT: R_X86_64_GOTPCREL xor
# NORELAX-NEXT: R_X86_64_GOTPCREL call
# NORELAX-NEXT: R_X86_64_GOTPCREL jmp
+# NORELAX-NEXT: R_X86_64_GOTPCREL mov
+# NORELAX-NEXT: R_X86_64_GOTPCREL test
+# NORELAX-NEXT: R_X86_64_GOTPCREL adc
+# NORELAX-NEXT: R_X86_64_GOTPCREL add
+# NORELAX-NEXT: R_X86_64_GOTPCREL and
+# NORELAX-NEXT: R_X86_64_GOTPCREL cmp
+# NORELAX-NEXT: R_X86_64_GOTPCREL or
+# NORELAX-NEXT: R_X86_64_GOTPCREL sbb
+# NORELAX-NEXT: R_X86_64_GOTPCREL sub
+# NORELAX-NEXT: R_X86_64_GOTPCREL xor
+# NORELAX-NEXT: R_X86_64_GOTPCREL mov
+# NORELAX-NEXT: R_X86_64_GOTPCREL test
+# NORELAX-NEXT: R_X86_64_GOTPCREL adc
+# NORELAX-NEXT: R_X86_64_GOTPCREL add
+# NORELAX-NEXT: R_X86_64_GOTPCREL and
+# NORELAX-NEXT: R_X86_64_GOTPCREL cmp
+# NORELAX-NEXT: R_X86_64_GOTPCREL or
+# NORELAX-NEXT: R_X86_64_GOTPCREL sbb
+# NORELAX-NEXT: R_X86_64_GOTPCREL sub
+# NORELAX-NEXT: R_X86_64_GOTPCREL xor
# NORELAX-NEXT: }
movl mov@GOTPCREL(%rip), %eax
call *call@GOTPCREL(%rip)
jmp *jmp@GOTPCREL(%rip)
+movl mov@GOTPCREL(%rip), %r8d
+test %r8d, test@GOTPCREL(%rip)
+adc adc@GOTPCREL(%rip), %r8d
+add add@GOTPCREL(%rip), %r8d
+and and@GOTPCREL(%rip), %r8d
+cmp cmp@GOTPCREL(%rip), %r8d
+or or@GOTPCREL(%rip), %r8d
+sbb sbb@GOTPCREL(%rip), %r8d
+sub sub@GOTPCREL(%rip), %r8d
+xor xor@GOTPCREL(%rip), %r8d
+
+movq mov@GOTPCREL(%rip), %rax
+test %rax, test@GOTPCREL(%rip)
+adc adc@GOTPCREL(%rip), %rax
+add add@GOTPCREL(%rip), %rax
+and and@GOTPCREL(%rip), %rax
+cmp cmp@GOTPCREL(%rip), %rax
+or or@GOTPCREL(%rip), %rax
+sbb sbb@GOTPCREL(%rip), %rax
+sub sub@GOTPCREL(%rip), %rax
+xor xor@GOTPCREL(%rip), %rax
+
# COMMON-NEXT: Section ({{.*}}) .rela.norelax {
# COMMON-NEXT: R_X86_64_GOTPCREL mov 0x0
+# COMMON-NEXT: R_X86_64_GOTPCREL mov 0xFFFFFFFFFFFFFFFD
# COMMON-NEXT: R_X86_64_GOTPCREL mov 0xFFFFFFFFFFFFFFFC
# COMMON-NEXT: }
# COMMON-NEXT: ]
## Clang may emit this expression to load the high 32-bit of the GOT entry.
## Don't emit R_X86_64_GOTPCRELX.
movl mov@GOTPCREL+4(%rip), %eax
+## Don't emit R_X86_64_GOTPCRELX.
+movq mov@GOTPCREL+1(%rip), %rax
## We could emit R_X86_64_GOTPCRELX, but it is probably unnecessary.
movl mov@GOTPCREL+0(%rip), %eax