[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