[polly] r277697 - GPGPU: Pass subtree values correctly to the kernel
Tobias Grosser via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 3 23:55:49 PDT 2016
Author: grosser
Date: Thu Aug 4 01:55:49 2016
New Revision: 277697
URL: http://llvm.org/viewvc/llvm-project?rev=277697&view=rev
Log:
GPGPU: Pass subtree values correctly to the kernel
Modified:
polly/trunk/lib/CodeGen/PPCGCodeGeneration.cpp
polly/trunk/test/GPGPU/scalar-parameter.ll
Modified: polly/trunk/lib/CodeGen/PPCGCodeGeneration.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/CodeGen/PPCGCodeGeneration.cpp?rev=277697&r1=277696&r2=277697&view=diff
==============================================================================
--- polly/trunk/lib/CodeGen/PPCGCodeGeneration.cpp (original)
+++ polly/trunk/lib/CodeGen/PPCGCodeGeneration.cpp Thu Aug 4 01:55:49 2016
@@ -221,12 +221,14 @@ private:
/// Create kernel launch parameters.
///
- /// @param Kernel The kernel to create parameters for.
- /// @param F The kernel function that has been created.
+ /// @param Kernel The kernel to create parameters for.
+ /// @param F The kernel function that has been created.
+ /// @param SubtreeValues The set of llvm::Values referenced by this kernel.
///
/// @returns A stack allocated array with pointers to the parameter
/// values that are passed to the kernel.
- Value *createLaunchParameters(ppcg_kernel *Kernel, Function *F);
+ Value *createLaunchParameters(ppcg_kernel *Kernel, Function *F,
+ SetVector<Value *> SubtreeValues);
/// Create GPU kernel.
///
@@ -879,8 +881,9 @@ GPUNodeBuilder::getBlockSizes(ppcg_kerne
return std::make_tuple(Sizes[0], Sizes[1], Sizes[2]);
}
-Value *GPUNodeBuilder::createLaunchParameters(ppcg_kernel *Kernel,
- Function *F) {
+Value *
+GPUNodeBuilder::createLaunchParameters(ppcg_kernel *Kernel, Function *F,
+ SetVector<Value *> SubtreeValues) {
Type *ArrayTy = ArrayType::get(Builder.getInt8PtrTy(),
std::distance(F->arg_begin(), F->arg_end()));
@@ -948,6 +951,19 @@ Value *GPUNodeBuilder::createLaunchParam
Index++;
}
+ for (auto Val : SubtreeValues) {
+ Instruction *Param = new AllocaInst(
+ Val->getType(), Launch + "_param_" + std::to_string(Index),
+ EntryBlock->getTerminator());
+ Builder.CreateStore(Val, Param);
+ Value *Slot = Builder.CreateGEP(
+ Parameters, {Builder.getInt64(0), Builder.getInt64(Index)});
+ Value *ParamTyped =
+ Builder.CreatePointerCast(Param, Builder.getInt8PtrTy());
+ Builder.CreateStore(ParamTyped, Slot);
+ Index++;
+ }
+
auto Location = EntryBlock->getTerminator();
return new BitCastInst(Parameters, Builder.getInt8PtrTy(),
Launch + "_params_i8ptr", Location);
@@ -1003,7 +1019,7 @@ void GPUNodeBuilder::createKernel(__isl_
S.invalidateScopArrayInfo(BasePtr, ScopArrayInfo::MK_Array);
LocalArrays.clear();
- Value *Parameters = createLaunchParameters(Kernel, F);
+ Value *Parameters = createLaunchParameters(Kernel, F, SubtreeValues);
std::string ASMString = finalizeKernelFunction();
std::string Name = "kernel_" + std::to_string(Kernel->id);
Modified: polly/trunk/test/GPGPU/scalar-parameter.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/GPGPU/scalar-parameter.ll?rev=277697&r1=277696&r2=277697&view=diff
==============================================================================
--- polly/trunk/test/GPGPU/scalar-parameter.ll (original)
+++ polly/trunk/test/GPGPU/scalar-parameter.ll Thu Aug 4 01:55:49 2016
@@ -2,6 +2,10 @@
; RUN: -disable-output < %s | \
; RUN: FileCheck -check-prefix=CODE %s
+; RUN: opt %loadPolly -polly-codegen-ppcg \
+; RUN: -S < %s | \
+; RUN: FileCheck -check-prefix=IR %s
+
; REQUIRES: pollyacc
; CODE: Code
@@ -301,6 +305,17 @@ bb7:
ret void
}
+; IR-LABEL: @i8
+
+; IR: %1 = call i8* @polly_getDevicePtr(i8* %p_dev_array_MemRef_A)
+; IR-NEXT: store i8* %1, i8** %polly_launch_0_param_0
+; IR-NEXT: %2 = getelementptr [2 x i8*], [2 x i8*]* %polly_launch_0_params, i64 0, i64 0
+; IR-NEXT: %3 = bitcast i8** %polly_launch_0_param_0 to i8*
+; IR-NEXT: store i8* %3, i8** %2
+; IR-NEXT: store i8 %b, i8* %polly_launch_0_param_1
+; IR-NEXT: %4 = getelementptr [2 x i8*], [2 x i8*]* %polly_launch_0_params, i64 0, i64 1
+; IR-NEXT: store i8* %polly_launch_0_param_1, i8** %4
+
; CODE: Code
; CODE-NEXT: ====
; CODE-NEXT: # host
More information about the llvm-commits
mailing list