In D120129 we enhanced vectorization options of byval parameters. This patch
removes code duplication when handling byval and non-byval cases.
Details
Diff Detail
Unit Tests
Time | Test | |
---|---|---|
60,040 ms | x64 debian > libFuzzer.libFuzzer::large.test |
Event Timeline
Nice. LGTM with few style nits.
llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp | ||
---|---|---|
1476 | alway->always | |
1477 | "whether it's naturally aligned or not." | |
1479–1490 | This all could be folded: ArgAlign = std::max( std::max(Outs[OIdx].Flags.getNonZeroByValAlign(), getFunctionParamOptimizedAlign(CB->getCalledFunction(), ETy, DL)), 4 ); It could be further extended to incorporate the if (IsByVal) -> IsByVal ? .... I think calculating ArgAlign in one place is a bit easier to follow than a series of conditional adjustments. |
llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp | ||
---|---|---|
1479–1490 | Creating a one-liner here does not look very good as for me - after clang-format we get the following code: Align ArgAlign = IsByVal ? std::max(std::max( // The ByValAlign in the Outs[OIdx].Flags is always // set at this point, so we don't need to worry // whether it's naturally aligned or not. See // TargetLowering::LowerCallTo(). Outs[OIdx].Flags.getNonZeroByValAlign(), // Try to increase alignment to enhance vectorization // options. getFunctionParamOptimizedAlign( CB->getCalledFunction(), ETy, DL)), // Enforce minumum alignment of 4 to work around ptxas // miscompile for sm_50+. See corresponding alignment // adjustment in emitFunctionParamList() for details. Align(4)) : getArgumentAlignment(Callee, CB, Ty, ParamCount + 1, DL); I just removed some intermediate variables and used temporary values instead. Looks clear enough IMHO, and there is no problem in reading code like // ... ArgAlign = ...; // ... ArgAlign = std::max(ArgAlign, ...); // ... ArgAlign = std::max(ArgAlign, ...); |
alway->always