Skip to content

Commit c9316dd

Browse files
committed
[SOL] Turn on solana feature for SBF target by default
1 parent b045e55 commit c9316dd

File tree

5 files changed

+24
-19
lines changed

5 files changed

+24
-19
lines changed

clang/lib/Driver/ToolChains/Arch/BPF.cpp

+8-5
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,6 @@ getBPFArchFeaturesFromMarch(const Driver &D, StringRef March,
3838
std::string MarchLowerCase = March.lower();
3939
std::pair<StringRef, StringRef> Split = StringRef(MarchLowerCase).split("+");
4040

41-
if (Split.first == "sbf") {
42-
Features.push_back("+solana");
43-
return true;
44-
}
45-
4641
return (Split.first == "bpfel" || Split.first == "bpfeb") &&
4742
(Split.second.size() == 0 || DecodeBPFFeatures(D, Split.second, Features));
4843
}
@@ -51,6 +46,14 @@ void bpf::getBPFTargetFeatures(const Driver &D, const ArgList &Args,
5146
std::vector<StringRef> &Features) {
5247
Arg *A;
5348
bool success = true;
49+
50+
if ((A = Args.getLastArg(options::OPT_target))) {
51+
StringRef Target = A->getValue();
52+
if (Target == "sbf") {
53+
Features.push_back("+solana");
54+
}
55+
}
56+
5457
if ((A = Args.getLastArg(options::OPT_march_EQ)))
5558
success = getBPFArchFeaturesFromMarch(D, A->getValue(), Args, Features);
5659
if (!success)

llvm/lib/Target/BPF/BPFRegisterInfo.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,9 @@ static void WarnSize(int Offset, MachineFunction &MF, DebugLoc& DL)
5858
dbgs() << " ";
5959
DL.print(dbgs());
6060
}
61-
dbgs() << " Function " << MF.getFunction().getName() << " Stack offset of " << Offset
62-
<< " exceeded max offset of " << MaxOffset << " by "
63-
<< -(Offset - MaxOffset) << " bytes, please minimize large stack variables\n";
61+
dbgs() << " Function " << MF.getFunction().getName() << " Stack offset of " << -Offset
62+
<< " exceeded max offset of " << -MaxOffset << " by "
63+
<< MaxOffset - Offset << " bytes, please minimize large stack variables\n";
6464
} else {
6565
DiagnosticInfoUnsupported DiagStackSize(MF.getFunction(),
6666
"BPF stack limit of 512 bytes is exceeded. "

llvm/lib/Target/BPF/BPFSubtarget.cpp

+6-5
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,17 @@ using namespace llvm;
2525

2626
void BPFSubtarget::anchor() {}
2727

28-
BPFSubtarget &BPFSubtarget::initializeSubtargetDependencies(StringRef CPU,
28+
BPFSubtarget &BPFSubtarget::initializeSubtargetDependencies(const Triple &TT,
29+
StringRef CPU,
2930
StringRef FS) {
30-
initializeEnvironment();
31+
initializeEnvironment(TT);
3132
initSubtargetFeatures(CPU, FS);
3233
ParseSubtargetFeatures(CPU, /*TuneCPU*/ CPU, FS);
3334
return *this;
3435
}
3536

36-
void BPFSubtarget::initializeEnvironment() {
37-
IsSolana = false;
37+
void BPFSubtarget::initializeEnvironment(const Triple &TT) {
38+
IsSolana = TT.getArch() == Triple::sbf;
3839
HasJmpExt = false;
3940
HasJmp32 = false;
4041
HasAlu32 = false;
@@ -61,7 +62,7 @@ void BPFSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {
6162
BPFSubtarget::BPFSubtarget(const Triple &TT, const std::string &CPU,
6263
const std::string &FS, const TargetMachine &TM)
6364
: BPFGenSubtargetInfo(TT, CPU, /*TuneCPU*/ CPU, FS), InstrInfo(),
64-
FrameLowering(initializeSubtargetDependencies(CPU, FS)),
65+
FrameLowering(initializeSubtargetDependencies(TT, CPU, FS)),
6566
TLInfo(TM, *this) {
6667
if (TT.getArch() == Triple::sbf) {
6768
IsSolana = true;

llvm/lib/Target/BPF/BPFSubtarget.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class BPFSubtarget : public BPFGenSubtargetInfo {
3636
BPFSelectionDAGInfo TSInfo;
3737

3838
private:
39-
void initializeEnvironment();
39+
void initializeEnvironment(const Triple &TT);
4040
void initSubtargetFeatures(StringRef CPU, StringRef FS);
4141
bool probeJmpExt();
4242

@@ -66,7 +66,7 @@ class BPFSubtarget : public BPFGenSubtargetInfo {
6666
BPFSubtarget(const Triple &TT, const std::string &CPU, const std::string &FS,
6767
const TargetMachine &TM);
6868

69-
BPFSubtarget &initializeSubtargetDependencies(StringRef CPU, StringRef FS);
69+
BPFSubtarget &initializeSubtargetDependencies(const Triple &TT, StringRef CPU, StringRef FS);
7070

7171
// ParseSubtargetFeatures - Parses features string setting specified
7272
// subtarget options. Definition of function is auto generated by tblgen.

llvm/lib/Target/BPF/BPFTargetMachine.cpp

+5-4
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,12 @@ extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeBPFTarget() {
5353

5454
// DataLayout: little or big endian
5555
static std::string computeDataLayout(const Triple &TT, StringRef FS) {
56-
bool isSolana = TT.getArch() == Triple::sbf || FS.contains("solana");
56+
bool IsSolana = TT.getArch() == Triple::sbf || FS.contains("solana");
5757
if (TT.getArch() == Triple::bpfeb) {
58-
return isSolana ? "E-m:e-p:64:64-i64:64-n32:64-S128"
58+
return IsSolana ? "E-m:e-p:64:64-i64:64-n32:64-S128"
5959
: "E-m:e-p:64:64-i64:64-i128:128-n32:64-S128";
6060
} else {
61-
return isSolana ? "e-m:e-p:64:64-i64:64-n32:64-S128"
61+
return IsSolana ? "e-m:e-p:64:64-i64:64-n32:64-S128"
6262
: "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128";
6363
}
6464
}
@@ -83,7 +83,8 @@ BPFTargetMachine::BPFTargetMachine(const Target &T, const Triple &TT,
8383
BPFMCAsmInfo *MAI =
8484
static_cast<BPFMCAsmInfo *>(const_cast<MCAsmInfo *>(AsmInfo.get()));
8585
MAI->setDwarfUsesRelocationsAcrossSections(!Subtarget.getUseDwarfRIS());
86-
MAI->setSupportsDebugInformation(!FS.contains("solana"));
86+
bool IsSolana = TT.getArch() == Triple::sbf || FS.contains("solana");
87+
MAI->setSupportsDebugInformation(!IsSolana);
8788
}
8889

8990
namespace {

0 commit comments

Comments
 (0)