Skip to content

Commit 12155f5

Browse files
committed
add hepler to emit N-ary builtins
1 parent 5a4c4c4 commit 12155f5

File tree

1 file changed

+16
-15
lines changed

1 file changed

+16
-15
lines changed

clang/lib/CodeGen/CGBuiltin.cpp

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,17 @@ static Value *emitTernaryBuiltin(CodeGenFunction &CGF,
614614
return CGF.Builder.CreateCall(F, { Src0, Src1, Src2 });
615615
}
616616

617+
// Emit an intrinsic that has N operands of the same type as its result.
618+
static Value *emitNaryBuiltin(CodeGenFunction &CGF, const CallExpr *E,
619+
unsigned IntrinsicID) {
620+
SmallVector<Value *, 16> Args;
621+
for (unsigned i = 0, e = E->getNumArgs(); i != e; i++)
622+
Args.push_back(CGF.EmitScalarExpr(E->getArg(i)));
623+
624+
Function *F = CGF.CGM.getIntrinsic(IntrinsicID, Args[0]->getType());
625+
return CGF.Builder.CreateCall(F, Args);
626+
}
627+
617628
// Emit an intrinsic that has 1 float or double operand, and 1 integer.
618629
static Value *emitFPIntBuiltin(CodeGenFunction &CGF,
619630
const CallExpr *E,
@@ -18480,21 +18491,11 @@ Value *CodeGenFunction::EmitAMDGPUBuiltinExpr(unsigned BuiltinID,
1848018491
return Builder.CreateCall(F, Args);
1848118492
}
1848218493
case AMDGPU::BI__builtin_amdgcn_permlane16:
18483-
case AMDGPU::BI__builtin_amdgcn_permlanex16: {
18484-
llvm::Value *Src0 = EmitScalarExpr(E->getArg(0));
18485-
llvm::Value *Src1 = EmitScalarExpr(E->getArg(1));
18486-
llvm::Value *Src2 = EmitScalarExpr(E->getArg(2));
18487-
llvm::Value *Src3 = EmitScalarExpr(E->getArg(3));
18488-
llvm::Value *Src4 = EmitScalarExpr(E->getArg(4));
18489-
llvm::Value *Src5 = EmitScalarExpr(E->getArg(5));
18490-
18491-
Intrinsic::ID IID = BuiltinID == AMDGPU::BI__builtin_amdgcn_permlane16
18492-
? Intrinsic::amdgcn_permlane16
18493-
: Intrinsic::amdgcn_permlanex16;
18494-
18495-
llvm::Function *F = CGM.getIntrinsic(IID, Src0->getType());
18496-
return Builder.CreateCall(F, {Src0, Src1, Src2, Src3, Src4, Src5});
18497-
}
18494+
case AMDGPU::BI__builtin_amdgcn_permlanex16:
18495+
return emitNaryBuiltin(*this, E,
18496+
BuiltinID == AMDGPU::BI__builtin_amdgcn_permlane16
18497+
? Intrinsic::amdgcn_permlane16
18498+
: Intrinsic::amdgcn_permlanex16);
1849818499
case AMDGPU::BI__builtin_amdgcn_permlane64:
1849918500
return emitUnaryBuiltin(*this, E, Intrinsic::amdgcn_permlane64);
1850018501
case AMDGPU::BI__builtin_amdgcn_readlane:

0 commit comments

Comments
 (0)