================
@@ -2253,22 +2253,31 @@ def trapexitinst : NVPTXInst<(outs), (ins), "trap;
exit;", [(trap)]>, Requires<[
// brkpt instruction
def debugtrapinst : BasicNVPTXInst<(outs), (ins), "brkpt", [(debugtrap)]>;
-def SDTDynAllocaOp :
- SDTypeProfile<1, 2, [SDTCisSameAs<0, 1>, SDTCisInt<1>, SDTCisVT<2, i32>]>;
+def SDTDynAllocaOp
+ : SDTypeProfile<1, 2, [SDTCisSameAs<0, 1>, SDTCisInt<1>, SDTCisVT<2,
i32>]>;
-def dyn_alloca :
- SDNode<"NVPTXISD::DYNAMIC_STACKALLOC", SDTDynAllocaOp,
- [SDNPHasChain, SDNPSideEffect]>;
+def getAllocaAlign : SDNodeXForm<imm, [{
+ if (N->getZExtValue() != 0)
+ return CurDAG->getTargetConstant(N->getZExtValue(), SDLoc(N),
N->getValueType(0));
+ return
CurDAG->getTargetConstant(CurDAG->getSubtarget().getFrameLowering()->getStackAlign().value(),
SDLoc(N), N->getValueType(0));
+}]>;
-foreach t = [I32RT, I64RT] in {
- def DYNAMIC_STACKALLOC # t.Size :
- BasicNVPTXInst<(outs t.RC:$ptr),
- (ins t.RC:$size, i32imm:$align),
- "alloca.u" # t.Size,
- [(set t.Ty:$ptr, (dyn_alloca t.Ty:$size, timm:$align))]>,
- Requires<[hasPTX<73>, hasSM<52>]>;
+def dyn_alloca : SDNode<"ISD::DYNAMIC_STACKALLOC",
+ SDTDynAllocaOp, [SDNPHasChain, SDNPSideEffect]>;
+
+let Predicates = [hasPTX<73>, hasSM<52>] in {
+ foreach t = [I32RT, I64RT] in {
+ def DYNAMIC_STACKALLOC_#t.Size
+ : BasicNVPTXInst<(outs t.RC:$ptr), (ins t.RC:$size, i32imm:$align),
+ "alloca.u"#t.Size>;
----------------
Artem-B wrote:
I'm curious about the state of the `alloca` instruction in ptxas.
PTX docs state that :
> alloca is a preview feature in PTX ISA version 7.3. All details are subject
> to change with no guarantees of backward compatibility on future PTX ISA
> versions or SM architectures.
Is that just an out of date bit of the documentation? Or is it still
experimental?
https://github.com/llvm/llvm-project/pull/154814
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits