Swaroop Sridhar bb3883dfba Statepoint: Fix handling of Far Immediate calls
gc.statepoint intrinsics with a far immediate call target 
were lowered incorrectly as pc-rel32 calls.

This change fixes the problem, and generates an indirect call 
via a scratch register.

For example: 

Intrinsic:
  %safepoint_token = call i32 (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* inttoptr (i64 140727162896504 to void ()*), i32 0, i32 0, i32 0, i32 0)

Old Incorrect Lowering:
  callq 140727162896504

New Correct Lowering:
  movabsq $140727162896504, %rax 
  callq *%rax

In lowerCallFromStatepoint(), the callee-target was modified and 
represented as a "TargetConstant" node, rather than a "Constant" node.
Undoing this modification enabled LowerCall() to generate the 
correct CALL instruction.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239114 91177308-0d34-0410-b5e6-96231b3b80d8
2015-06-04 23:03:21 +00:00
..
2015-06-03 13:41:48 +00:00
2015-06-03 13:41:48 +00:00
2015-04-06 22:29:07 +00:00
2015-04-06 22:29:07 +00:00
2015-03-06 20:51:25 +00:00
2015-03-06 21:50:27 +00:00
2015-06-02 22:33:30 +00:00
2015-05-28 22:12:27 +00:00
2015-04-30 21:22:28 +00:00
2015-05-02 11:50:47 +00:00
2015-03-06 21:30:18 +00:00
2015-03-06 20:38:55 +00:00
2015-03-06 20:46:16 +00:00