@@ -4224,88 +4224,25 @@ bool SPIRVToLLVM::transAlign(SPIRVValue *BV, Value *V) {
42244224 return true ;
42254225}
42264226
4227- void SPIRVToLLVM::transOCLVectorLoadStore (std::string &UnmangledName,
4228- std::vector<SPIRVWord> &BArgs) {
4229- if (UnmangledName.find (" vload" ) == 0 &&
4230- UnmangledName.find (" n" ) != std::string::npos) {
4231- if (BArgs.back () != 1 ) {
4232- std::stringstream SS;
4233- SS << BArgs.back ();
4234- UnmangledName.replace (UnmangledName.find (" n" ), 1 , SS.str ());
4235- } else {
4236- UnmangledName.erase (UnmangledName.find (" n" ), 1 );
4237- }
4238- BArgs.pop_back ();
4239- } else if (UnmangledName.find (" vstore" ) == 0 ) {
4240- if (UnmangledName.find (" n" ) != std::string::npos) {
4241- auto T = BM->getValueType (BArgs[0 ]);
4242- if (T->isTypeVector ()) {
4243- auto W = T->getVectorComponentCount ();
4244- std::stringstream SS;
4245- SS << W;
4246- UnmangledName.replace (UnmangledName.find (" n" ), 1 , SS.str ());
4247- } else {
4248- UnmangledName.erase (UnmangledName.find (" n" ), 1 );
4249- }
4250- }
4251- if (UnmangledName.find (" _r" ) != std::string::npos) {
4252- UnmangledName.replace (
4253- UnmangledName.find (" _r" ), 2 ,
4254- std::string (" _" ) +
4255- SPIRSPIRVFPRoundingModeMap::rmap (
4256- static_cast <SPIRVFPRoundingModeKind>(BArgs.back ())));
4257- BArgs.pop_back ();
4258- }
4259- }
4260- }
4261-
4262- // printf is not mangled. The function type should have just one argument.
4263- // read_image*: the second argument should be mangled as sampler.
42644227Instruction *SPIRVToLLVM::transOCLBuiltinFromExtInst (SPIRVExtInst *BC,
42654228 BasicBlock *BB) {
42664229 assert (BB && " Invalid BB" );
4267- std::string MangledName;
4268- SPIRVWord EntryPoint = BC->getExtOp ();
4269- std::string UnmangledName;
4270- std::vector<SPIRVWord> BArgs = BC->getArguments ();
4230+ auto ExtOp = static_cast <OCLExtOpKind>(BC->getExtOp ());
4231+ std::string UnmangledName = OCLExtOpMap::map (ExtOp);
42714232
42724233 assert (BM->getBuiltinSet (BC->getExtSetId ()) == SPIRVEIS_OpenCL &&
42734234 " Not OpenCL extended instruction" );
42744235
4275- bool IsPrintf = (EntryPoint == OpenCLLIB::Printf);
4276- UnmangledName = OCLExtOpMap::map (static_cast <OCLExtOpKind>(EntryPoint));
4277-
4278- SPIRVDBG (spvdbgs () << " [transOCLBuiltinFromExtInst] OrigUnmangledName: "
4279- << UnmangledName << ' \n ' );
4280- transOCLVectorLoadStore (UnmangledName, BArgs);
4281-
4282- std::vector<Type *> ArgTypes = transTypeVector (BC->getValueTypes (BArgs));
4283-
4284- // TODO: we should always produce SPIR-V friendly IR and apply lowering
4285- // later if needed
4286- if (IsPrintf) {
4287- ArgTypes.resize (1 );
4288- }
4289-
4236+ std::vector<Type *> ArgTypes = transTypeVector (BC->getArgTypes ());
42904237 Type *RetTy = transType (BC->getType ());
4291- if (BM->getDesiredBIsRepresentation () != BIsRepresentation::SPIRVFriendlyIR) {
4292- // Convert extended instruction into an OpenCL built-in
4293- if (IsPrintf) {
4294- MangledName = " printf" ;
4295- } else {
4296- mangleOpenClBuiltin (UnmangledName, ArgTypes, MangledName);
4297- }
4298- } else {
4299- MangledName = getSPIRVFriendlyIRFunctionName (
4300- static_cast <OCLExtOpKind>(EntryPoint), ArgTypes, RetTy);
4301- }
4238+ std::string MangledName =
4239+ getSPIRVFriendlyIRFunctionName (ExtOp, ArgTypes, RetTy);
43024240
4303- SPIRVDBG (spvdbgs () << " [transOCLBuiltinFromExtInst] ModifiedUnmangledName : "
4241+ SPIRVDBG (spvdbgs () << " [transOCLBuiltinFromExtInst] UnmangledName : "
43044242 << UnmangledName << " MangledName: " << MangledName
43054243 << ' \n ' );
43064244
4307- FunctionType *FT = FunctionType::get (RetTy, ArgTypes,
4308- /* IsVarArg */ IsPrintf);
4245+ FunctionType *FT = FunctionType::get (RetTy, ArgTypes, false );
43094246 Function *F = M->getFunction (MangledName);
43104247 if (!F) {
43114248 F = Function::Create (FT, GlobalValue::ExternalLinkage, MangledName, M);
@@ -4315,17 +4252,17 @@ Instruction *SPIRVToLLVM::transOCLBuiltinFromExtInst(SPIRVExtInst *BC,
43154252 if (isFuncReadNone (UnmangledName))
43164253 F->addFnAttr (Attribute::ReadNone);
43174254 }
4318- auto Args = transValue (BC->getValues (BArgs ), F, BB);
4255+ auto Args = transValue (BC->getArgValues ( ), F, BB);
43194256 SPIRVDBG (dbgs () << " [transOCLBuiltinFromExtInst] Function: " << *F
43204257 << " , Args: " ;
43214258 for (auto &I
43224259 : Args) dbgs ()
43234260 << *I << " , " ;
43244261 dbgs () << ' \n ' );
4325- CallInst *Call = CallInst::Create (F, Args, BC->getName (), BB);
4326- setCallingConv (Call );
4327- addFnAttr (Call , Attribute::NoUnwind);
4328- return transOCLBuiltinPostproc (BC, Call, BB, UnmangledName) ;
4262+ CallInst *CI = CallInst::Create (F, Args, BC->getName (), BB);
4263+ setCallingConv (CI );
4264+ addFnAttr (CI , Attribute::NoUnwind);
4265+ return CI ;
43294266}
43304267
43314268// SPIR-V only contains language version. Use OpenCL language version as
0 commit comments