[llvm] [NVPTX] fixup support for unaligned parameters and returns (PR #82562)

Artem Belevich via llvm-commits llvm-commits at lists.llvm.org
Wed Feb 21 17:43:38 PST 2024


================
@@ -3045,9 +3205,28 @@ SDValue NVPTXTargetLowering::LowerFormalArguments(
                           DAG.getConstant(Offsets[VecIdx], dl, PtrVT));
           Value *srcValue = Constant::getNullValue(PointerType::get(
               EltVT.getTypeForEVT(F->getContext()), ADDRESS_SPACE_PARAM));
+
+          MaybeAlign PartAlign;
+          if (NumElts == 1) {
+            if (aggregateIsPacked) {
+              PartAlign = Align(1);
+            } else if (Offsets[parti] == 0) {
+              if (MaybeAlign ParamAlign = PAL.getParamAlignment(i)) {
+                PartAlign = ParamAlign.value();
+              } else {
+                PartAlign =
+                    DL.getABITypeAlign(EltVT.getTypeForEVT(F->getContext()));
+              }
+            } else {
+              PartAlign =
+                  DL.getABITypeAlign(EltVT.getTypeForEVT(F->getContext()));
+            }
+            PartAlign = commonAlignment(PartAlign.valueOrOne(), Offsets[parti]);
+          } else {
+            PartAlign = MaybeAlign(aggregateIsPacked);
+          }
----------------
Artem-B wrote:

I think a lambda+early return may be a bit more readable.
```
PartsAlign = [](){
  if (NumElts != 1)
     return MaybeAlign(aggregateIsPacked);
  if (aggregateIsPacked)
     return Align(1);
  if (Offsets[parti] != 0)
     return DL.getABITypeAlign(EltVT.getTypeForEVT(F->getContext()));
  if (MaybeAlign ParamAlign = PAL.getParamAlignment(i))
      return ParamAlign.value();
    ...
  
}();
```

https://github.com/llvm/llvm-project/pull/82562


More information about the llvm-commits mailing list