[NVPTX] Fix bugs related to isSingleValueType

Summary:
With isSingleValueType starting to treat vector types as single-value types,
code that uses this interface needs to be updated.

Test Plan:
vector-global.ll
nvcl-param-align.ll

Reviewers: jholewinski

Reviewed By: jholewinski

Subscribers: llvm-commits, meheff, eliben, jholewinski

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224440 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jingyue Wu 2014-12-17 17:59:04 +00:00
parent 898a22d7a5
commit 9830b459be
3 changed files with 27 additions and 13 deletions

View File

@ -1128,7 +1128,7 @@ void NVPTXAsmPrinter::printModuleLevelGV(const GlobalVariable *GVar,
else
O << " .align " << GVar->getAlignment();
if (ETy->isSingleValueType()) {
if (ETy->isFloatingPointTy() || ETy->isIntegerTy() || ETy->isPointerTy()) {
O << " .";
// Special case: ABI requires that we use .u8 for predicates
if (ETy->isIntegerTy(1))
@ -1310,7 +1310,7 @@ void NVPTXAsmPrinter::emitPTXGlobalVariable(const GlobalVariable *GVar,
else
O << " .align " << GVar->getAlignment();
if (ETy->isSingleValueType()) {
if (ETy->isFloatingPointTy() || ETy->isIntegerTy() || ETy->isPointerTy()) {
O << " .";
O << getPTXFundamentalTypeStr(ETy);
O << " ";
@ -1349,17 +1349,6 @@ static unsigned int getOpenCLAlignment(const DataLayout *TD, Type *Ty) {
if (ATy)
return getOpenCLAlignment(TD, ATy->getElementType());
const VectorType *VTy = dyn_cast<VectorType>(Ty);
if (VTy) {
Type *ETy = VTy->getElementType();
unsigned int numE = VTy->getNumElements();
unsigned int alignE = TD->getPrefTypeAlignment(ETy);
if (numE == 3)
return 4 * alignE;
else
return numE * alignE;
}
const StructType *STy = dyn_cast<StructType>(Ty);
if (STy) {
unsigned int alignStruct = 1;

View File

@ -0,0 +1,16 @@
; RUN: llc < %s -march=nvptx -mcpu=sm_20 | FileCheck %s
target triple = "nvptx-unknown-nvcl"
; CHECK-LABEL: .entry foo(
define void @foo(i64 %img, i64 %sampler, <5 x float>* %v) {
; The parameter alignment should be the next power of 2 of 5xsizeof(float),
; which is 32.
; CHECK: .param .u32 .ptr .align 32 foo_param_2
ret void
}
!nvvm.annotations = !{!1, !2, !3}
!1 = !{void (i64, i64, <5 x float>*)* @foo, !"kernel", i32 1}
!2 = !{void (i64, i64, <5 x float>*)* @foo, !"rdoimage", i32 0}
!3 = !{void (i64, i64, <5 x float>*)* @foo, !"sampler", i32 1}

View File

@ -0,0 +1,9 @@
; RUN: llc < %s -march=nvptx64 -mcpu=sm_20 | FileCheck %s
target datalayout = "e-i64:64-v16:16-v32:32-n16:32:64"
target triple = "nvptx64-nvidia-cuda"
@g1 = external global <4 x i32> ; external global variable
; CHECK: .extern .global .align 16 .b8 g1[16];
@g2 = global <4 x i32> zeroinitializer ; module-level global variable
; CHECK: .visible .global .align 16 .b8 g2[16];