[llvm] r273922 - Only emit extension for zeroext/signext arguments if type is < 32 bits

Justin Holewinski via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 27 13:22:22 PDT 2016


Author: jholewinski
Date: Mon Jun 27 15:22:22 2016
New Revision: 273922

URL: http://llvm.org/viewvc/llvm-project?rev=273922&view=rev
Log:
Only emit extension for zeroext/signext arguments if type is < 32 bits

Reviewers: jingyue, jlebar

Subscribers: jholewinski

Differential Revision: http://reviews.llvm.org/D21756

Added:
    llvm/trunk/test/CodeGen/NVPTX/zeroext-32bit.ll
Modified:
    llvm/trunk/lib/Target/NVPTX/NVPTXISelLowering.cpp

Modified: llvm/trunk/lib/Target/NVPTX/NVPTXISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXISelLowering.cpp?rev=273922&r1=273921&r2=273922&view=diff
==============================================================================
--- llvm/trunk/lib/Target/NVPTX/NVPTXISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/NVPTX/NVPTXISelLowering.cpp Mon Jun 27 15:22:22 2016
@@ -1311,9 +1311,9 @@ SDValue NVPTXTargetLowering::LowerCall(T
                                  InFlag };
 
       unsigned opcode = NVPTXISD::StoreParam;
-      if (Outs[OIdx].Flags.isZExt())
+      if (Outs[OIdx].Flags.isZExt() && VT.getSizeInBits() < 32)
         opcode = NVPTXISD::StoreParamU32;
-      else if (Outs[OIdx].Flags.isSExt())
+      else if (Outs[OIdx].Flags.isSExt() && VT.getSizeInBits() < 32)
         opcode = NVPTXISD::StoreParamS32;
       Chain = DAG.getMemIntrinsicNode(opcode, dl, CopyParamVTs, CopyParamOps,
                                       VT, MachinePointerInfo());

Added: llvm/trunk/test/CodeGen/NVPTX/zeroext-32bit.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/NVPTX/zeroext-32bit.ll?rev=273922&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/NVPTX/zeroext-32bit.ll (added)
+++ llvm/trunk/test/CodeGen/NVPTX/zeroext-32bit.ll Mon Jun 27 15:22:22 2016
@@ -0,0 +1,26 @@
+; RUN: llc < %s -march=nvptx64 -mcpu=sm_30 | FileCheck %s
+
+; The zeroext attribute below should be silently ignored because
+; we can pass a 32-bit integer across a function call without
+; needing to extend it.
+
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v16:16:16-v32:32:32-v64:64:64-v128:128:128-n16:32:64"
+target triple = "nvptx64-unknown-cuda"
+
+; CHECK-LABEL: .visible .func zeroext_test
+; CHECK-NOT: cvt.u32.u16
+define void @zeroext_test()  {
+  tail call void @call1(i32 zeroext 0)
+  ret void
+}
+
+declare void @call1(i32 zeroext)
+
+; CHECK-LABEL: .visible .func signext_test
+; CHECK-NOT: cvt.s32.s16
+define void @signext_test()  {
+  tail call void @call2(i32 zeroext 0)
+  ret void
+}
+
+declare void @call2(i32 zeroext)




More information about the llvm-commits mailing list