XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7,
XMM8, XMM9, XMM10, XMM11, XMM12, XMM13, XMM14, XMM15, EFLAGS],
Uses = [RSP] in {
+
+ // NOTE: this pattern doesn't match "X86call imm", because we do not know
+ // that the offset between an arbitrary immediate and the call will fit in
+ // the 32-bit pcrel field that we have.
def CALL64pcrel32 : I<0xE8, RawFrm,
(outs), (ins i64i32imm:$dst, variable_ops),
- "call\t${dst:call}", [(X86call imm:$dst)]>,
+ "call\t${dst:call}", []>,
Requires<[In64BitMode]>;
def CALL64r : I<0xFF, MRM2r, (outs), (ins GR64:$dst, variable_ops),
"call\t{*}$dst", [(X86call GR64:$dst)]>;
-; RUN: llvm-as < %s | llc -march=x86 | grep call | not grep {*}
-; RUN: llvm-as < %s | llc -march=x86 | grep call | grep 12345678
-; RUN: llvm-as < %s | llc -march=x86-64 | grep call | grep 12345678
+; RUN: llvm-as < %s | llc -march=x86 | grep {call.*12345678}
+
+; Call to immediate is not safe on x86-64 unless we *know* that the
+; call will be within 32-bits pcrel from the dest immediate.
+
+; RUN: llvm-as < %s | llc -march=x86-64 | grep {call.*\*%rax}
+
; PR3666
; PR3773