Commit 132aad8e authored by George Stelle's avatar George Stelle
Browse files

Handling kernel arguments

parent f0486394
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ TapirTargetID clang::parseTapirTarget(const ArgList &Args) {
      // TODO: Deprecate non-opencilk support...
      .Case("cilk", TapirTargetID::Cilk)
      .Case("cilkr", TapirTargetID::CilkR)
      .Case("gpu", TapirTargetID::GPU)
      .Default(TapirTargetID::Last_TapirTargetID);

  return TapirTarget;
+3 −1
Original line number Diff line number Diff line
@@ -3708,6 +3708,8 @@ bool CompilerInvocation::CreateFromArgs(CompilerInvocation &Res,
      LangOpts.Tapir = TapirTargetID::Realm;
    else if (Name == "opencl")
      LangOpts.Tapir = TapirTargetID::OpenCL;
    else if (Name == "gpu")
      LangOpts.Tapir = TapirTargetID::GPU;
    else if (Name == "serial")
      LangOpts.Tapir = TapirTargetID::Serial;
    else
+5 −2
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@

using namespace llvm;

#define DEBUG_TYPE "openclabi"
#define DEBUG_TYPE "gpuabi"

Value *GPUABI::lowerGrainsizeCall(CallInst *GrainsizeCall) {
  Value *Grainsize = ConstantInt::get(GrainsizeCall->getType(), 8);
@@ -72,7 +72,7 @@ LoopOutlineProcessor *GPUABI::getLoopOutlineProcessor(
unsigned LLVMLoop::NextKernelID = 0;

LLVMLoop::LLVMLoop(Module &M)
    : LoopOutlineProcessor(M, LLVMM), LLVMM("spirvModule", M.getContext()) {
    : LoopOutlineProcessor(M, LLVMM), LLVMM("kernelModule", M.getContext()) {
  // Assign an ID to this kernel.
  MyKernelID = NextKernelID++;

@@ -358,12 +358,15 @@ void LLVMLoop::processOutlinedLoopCall(TapirLoopInfo &TL, TaskOutlineInfo &TOI,

  ArrayType* arrayType = ArrayType::get(VoidPtrTy, OrderedInputs.size()); 
  Value* argArray = B.CreateAlloca(arrayType); 
  int i=0;
  for (Value *V : OrderedInputs) {
    //Value *ElementSize = nullptr;
    LLVM_DEBUG(dbgs() << "Input set value: " << *V << "\n"); 
    Value *VPtr = B.CreateAlloca(V->getType()); 
    B.CreateStore(V, VPtr); 
    Value *VoidVPtr = B.CreateBitCast(VPtr, VoidPtrTy);
    Value *argPtr = B.CreateConstInBoundsGEP1_32(VoidPtrTy, argArray, i++); 
    B.CreateStore(VoidVPtr, argPtr); 
  }

  Value *Grainsize = TL.getGrainsize() ?