Skip to content

Commit cca9003

Browse files
Fix some of Matt's comments
1 parent bd11e64 commit cca9003

File tree

7 files changed

+28
-26
lines changed

7 files changed

+28
-26
lines changed

clang/lib/CodeGen/Targets/AMDGPU.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,10 @@ Address AMDGPUABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
117117
QualType Ty) const {
118118
const bool IsIndirect = false;
119119
const bool AllowHigherAlign = true;
120-
// Would rather not naturally align values
121-
// Splitting {char, short} into two separate arguments makes that difficult.
120+
// Would rather not naturally align values, e.g. passing double on 4 bytes
121+
// Splitting {char, short} into two separate arguments makes that difficult
122+
// TODO: See if forcing exactly four byte alignment on everything, struct or
123+
// scalar, lowers correctly regardless of structs being split across arguments
122124
return emitVoidPtrVAArg(CGF, VAListAddr, Ty, IsIndirect,
123125
getContext().getTypeInfoInChars(Ty),
124126
CharUnits::fromQuantity(1), AllowHigherAlign);

llvm/include/llvm/Transforms/IPO/ExpandVariadics.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ class ModulePass;
1717
class OptimizationLevel;
1818

1919
enum class ExpandVariadicsMode {
20-
unspecified,
21-
disable,
22-
optimize,
23-
lowering,
20+
Unspecified, // Use the implementation defaults
21+
Disable, // Disable the pass entirely
22+
Optimize, // Optimise without changing ABI
23+
Lowering, // Change variadic calling convention
2424
};
2525

2626
class ExpandVariadicsPass : public PassInfoMixin<ExpandVariadicsPass> {

llvm/lib/Target/AMDGPU/AMDGPUPassRegistry.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ MODULE_PASS("amdgpu-lower-ctor-dtor", AMDGPUCtorDtorLoweringPass())
2424
MODULE_PASS("amdgpu-lower-module-lds", AMDGPULowerModuleLDSPass(*this))
2525
MODULE_PASS("amdgpu-printf-runtime-binding", AMDGPUPrintfRuntimeBindingPass())
2626
MODULE_PASS("amdgpu-unify-metadata", AMDGPUUnifyMetadataPass())
27-
MODULE_PASS("expand-variadics", ExpandVariadicsPass(ExpandVariadicsMode::lowering))
27+
MODULE_PASS("expand-variadics", ExpandVariadicsPass(ExpandVariadicsMode::Lowering))
2828
#undef MODULE_PASS
2929

3030
#ifndef FUNCTION_PASS

llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -975,7 +975,7 @@ void AMDGPUPassConfig::addIRPasses() {
975975
if (isPassEnabled(EnableImageIntrinsicOptimizer))
976976
addPass(createAMDGPUImageIntrinsicOptimizerPass(&TM));
977977

978-
addPass(createExpandVariadicsPass(ExpandVariadicsMode::lowering));
978+
addPass(createExpandVariadicsPass(ExpandVariadicsMode::Lowering));
979979

980980
// Function calls are not supported, so make sure we inline everything.
981981
addPass(createAMDGPUAlwaysInlinePass());

llvm/lib/Target/NVPTX/NVPTXPassRegistry.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#endif
1919
MODULE_PASS("generic-to-nvvm", GenericToNVVMPass())
2020
MODULE_PASS("nvptx-lower-ctor-dtor", NVPTXCtorDtorLoweringPass())
21+
MODULE_PASS("expand-variadics", ExpandVariadicsPass(ExpandVariadicsMode::Lowering))
2122
#undef MODULE_PASS
2223

2324
#ifndef FUNCTION_ANALYSIS

llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ void NVPTXPassConfig::addIRPasses() {
325325
}));
326326

327327
// Should run before anything (else!) that adjusts calling conventions
328-
addPass(createExpandVariadicsPass(ExpandVariadicsMode::lowering));
328+
addPass(createExpandVariadicsPass(ExpandVariadicsMode::Lowering));
329329

330330
// NVVMReflectPass is added in addEarlyAsPossiblePasses, so hopefully running
331331
// it here does nothing. But since we need it for correctness when lowering

llvm/lib/Transforms/IPO/ExpandVariadics.cpp

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -53,26 +53,27 @@
5353
#include "llvm/Support/CommandLine.h"
5454
#include "llvm/TargetParser/Triple.h"
5555

56-
#include <cstdio>
57-
5856
#define DEBUG_TYPE "expand-variadics"
5957

6058
using namespace llvm;
6159

6260
cl::opt<ExpandVariadicsMode> ExpandVariadicsModeOption(
6361
DEBUG_TYPE "-override", cl::desc("Override the behaviour of " DEBUG_TYPE),
64-
cl::init(ExpandVariadicsMode::unspecified),
65-
cl::values(clEnumValN(ExpandVariadicsMode::unspecified, "unspecified",
62+
cl::init(ExpandVariadicsMode::Unspecified),
63+
cl::values(clEnumValN(ExpandVariadicsMode::Unspecified, "unspecified",
6664
"Use the implementation defaults"),
67-
clEnumValN(ExpandVariadicsMode::disable, "disable",
65+
clEnumValN(ExpandVariadicsMode::Disable, "disable",
6866
"Disable the pass entirely"),
69-
clEnumValN(ExpandVariadicsMode::optimize, "optimize",
67+
clEnumValN(ExpandVariadicsMode::Optimize, "optimize",
7068
"Optimise without changing ABI"),
71-
clEnumValN(ExpandVariadicsMode::lowering, "lowering",
69+
clEnumValN(ExpandVariadicsMode::Lowering, "lowering",
7270
"Change variadic calling convention")));
7371

7472
namespace {
7573

74+
// At present Intrinsic:: has no interface to test if a declaration is in the
75+
// module without creating one. Inserting a declaration and then testing if it
76+
// has any uses and then deleting it seems a bad way to do the query.
7677
// Module implements getFunction() which returns nullptr on missing declaration
7778
// and getOrInsertFunction which creates one when absent. Intrinsics.h
7879
// implements getDeclaration which creates one when missing. This should be
@@ -319,7 +320,7 @@ class ExpandVariadics : public ModulePass {
319320
static ExpandVariadicsMode
320321
withCommandLineOverride(ExpandVariadicsMode LLVMRequested) {
321322
ExpandVariadicsMode UserRequested = ExpandVariadicsModeOption;
322-
return (UserRequested == ExpandVariadicsMode::unspecified) ? LLVMRequested
323+
return (UserRequested == ExpandVariadicsMode::Unspecified) ? LLVMRequested
323324
: UserRequested;
324325
}
325326

@@ -346,7 +347,7 @@ class ExpandVariadics : public ModulePass {
346347
// Entry point
347348
bool runOnModule(Module &M) override;
348349

349-
bool rewriteABI() { return Mode == ExpandVariadicsMode::lowering; }
350+
bool rewriteABI() { return Mode == ExpandVariadicsMode::Lowering; }
350351

351352
void memcpyVAListPointers(const DataLayout &DL, IRBuilder<> &Builder,
352353
Value *Dst, Value *Src) {
@@ -550,7 +551,7 @@ class ExpandVariadics : public ModulePass {
550551

551552
bool ExpandVariadics::runOnModule(Module &M) {
552553
bool Changed = false;
553-
if (Mode == ExpandVariadicsMode::disable)
554+
if (Mode == ExpandVariadicsMode::Disable)
554555
return Changed;
555556

556557
llvm::Triple Triple(M.getTargetTriple());
@@ -562,7 +563,7 @@ bool ExpandVariadics::runOnModule(Module &M) {
562563

563564
ABI = VariadicABIInfo::create(Triple);
564565
if (!ABI) {
565-
if (Mode == ExpandVariadicsMode::lowering) {
566+
if (Mode == ExpandVariadicsMode::Lowering) {
566567
report_fatal_error(
567568
"Requested variadic lowering is unimplemented on this target");
568569
}
@@ -608,7 +609,7 @@ bool ExpandVariadics::runOnModule(Module &M) {
608609
// and va_copy are removed. All that remains is for the lowering pass to find
609610
// indirect calls and rewrite those as well.
610611

611-
if (Mode == ExpandVariadicsMode::lowering) {
612+
if (Mode == ExpandVariadicsMode::Lowering) {
612613
for (Function &F : llvm::make_early_inc_range(M)) {
613614
if (F.isDeclaration())
614615
continue;
@@ -638,8 +639,6 @@ bool ExpandVariadics::runOnFunction(Module &M, IRBuilder<> &Builder,
638639
Function *F) {
639640
bool Changed = false;
640641

641-
// fprintf(stderr, "Called runOn: %s\n", F->getName().str().c_str());
642-
643642
// This check might be too coarse - there are probably cases where
644643
// splitting a function is bad but it's usable without splitting
645644
if (!expansionApplicableToFunction(M, F))
@@ -674,7 +673,7 @@ bool ExpandVariadics::runOnFunction(Module &M, IRBuilder<> &Builder,
674673
Value *calledOperand = CB->getCalledOperand();
675674
if (F == calledOperand) {
676675
report_fatal_error(
677-
"ExpandVA abi requires eliminating call uses first\n");
676+
"ExpandVA abi requires eliminating call uses first");
678677
}
679678
}
680679

@@ -1049,8 +1048,8 @@ PreservedAnalyses ExpandVariadicsPass::run(Module &M, ModuleAnalysisManager &) {
10491048

10501049
ExpandVariadicsPass::ExpandVariadicsPass(OptimizationLevel Level)
10511050
: ExpandVariadicsPass(Level == OptimizationLevel::O0
1052-
? ExpandVariadicsMode::disable
1053-
: ExpandVariadicsMode::optimize) {}
1051+
? ExpandVariadicsMode::Disable
1052+
: ExpandVariadicsMode::Optimize) {}
10541053

10551054
ExpandVariadicsPass::ExpandVariadicsPass(ExpandVariadicsMode Mode)
10561055
: ConstructedMode(Mode) {}

0 commit comments

Comments
 (0)