[PATCH] D17315: [NVPTX] Annotate call machine instructions as calls.

Justin Lebar via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 16 16:54:49 PST 2016


jlebar created this revision.
jlebar added reviewers: jingyue, tra.
jlebar added subscribers: llvm-commits, jhen.
Herald added a subscriber: jholewinski.

Otherwise we'll try to do unsafe optimizations on these MIs, such as
sinking loads below calls.

(I suspect that this is not the only bug in the NVPTX instruction
tablegen files; I need to comb through them.)

http://reviews.llvm.org/D17315

Files:
  lib/Target/NVPTX/NVPTXInstrInfo.td
  test/CodeGen/NVPTX/MachineSink-call.ll

Index: test/CodeGen/NVPTX/MachineSink-call.ll
===================================================================
--- /dev/null
+++ test/CodeGen/NVPTX/MachineSink-call.ll
@@ -0,0 +1,23 @@
+; RUN: llc < %s | FileCheck %s
+target triple = "nvptx64-nvidia-cuda"
+
+declare void @foo()
+
+; Load a value, then call a function.  Branch, and use the loaded value only on
+; one side of the branch.  The load shouldn't be sunk beneath the call, because
+; the call may modify memory.
+define i32 @f(i32 %x, i32* %ptr, i1 %cond) {
+Start:
+  ; CHECK: ld.u32
+  %ptr_val = load i32, i32* %ptr
+  ; CHECK: call.uni
+  call void @foo()
+  br i1 %cond, label %L1, label %L2
+L1:
+  %ptr_val2 = add i32 %ptr_val, 100
+  br label %L2
+L2:
+  %v4 = phi i32 [ %x, %Start ], [ %ptr_val2, %L1 ]
+  %v5 = add i32 %v4, 1000
+  ret i32 %v5
+}
Index: lib/Target/NVPTX/NVPTXInstrInfo.td
===================================================================
--- lib/Target/NVPTX/NVPTXInstrInfo.td
+++ lib/Target/NVPTX/NVPTXInstrInfo.td
@@ -1826,6 +1826,7 @@
                 "\t[func_retval0+$a], {{$val, $val2, $val3, $val4}};"),
                 []>;
 
+let isCall = 1 in {
 def PrintCallRetInst1 : NVPTXInst<(outs), (ins),
 "call (retval0), ",
                                 [(PrintCall (i32 1))]>;
@@ -1883,6 +1884,7 @@
 
 def PrintCallUniNoRetInst : NVPTXInst<(outs), (ins), "call.uni ",
                                 [(PrintCallUni (i32 0))]>;
+} // call instructions
 
 def LoadParamMemI64    : LoadParamMemInst<Int64Regs, ".b64">;
 def LoadParamMemI32    : LoadParamMemInst<Int32Regs, ".b32">;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D17315.48129.patch
Type: text/x-patch
Size: 1581 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160217/43cfb1d9/attachment.bin>


More information about the llvm-commits mailing list