Skip to content

Commit 7eaae11

Browse files
committed
Apply feedback
1 parent 3d03a58 commit 7eaae11

File tree

4 files changed

+56
-41
lines changed

4 files changed

+56
-41
lines changed

llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8287,16 +8287,16 @@ void AMDGPUAsmParser::onBeginOfFile() {
82878287
bool AMDGPUAsmParser::parsePrimaryExpr(const MCExpr *&Res, SMLoc &EndLoc) {
82888288
using AGVK = AMDGPUVariadicMCExpr::AMDGPUVariadicKind;
82898289

8290-
auto parseVariadicExpr = [&](AGVK Kind, const MCExpr *&res, SMLoc &EndLoc) {
8291-
std::vector<const MCExpr *> Exprs;
8290+
auto ParseVariadicExpr = [&](AGVK Kind, const MCExpr *&Result,
8291+
SMLoc &EndLoc) {
8292+
SmallVector<const MCExpr *, 4> Exprs;
82928293
while (true) {
8293-
if (isToken(AsmToken::RParen)) {
8294+
if (trySkipToken(AsmToken::RParen)) {
82948295
if (Exprs.empty()) {
82958296
Error(getToken().getLoc(), "empty max/or expression");
82968297
return true;
82978298
}
8298-
lex();
8299-
res = AMDGPUVariadicMCExpr::create(Kind, Exprs, getContext());
8299+
Result = AMDGPUVariadicMCExpr::create(Kind, Exprs, getContext());
83008300
return false;
83018301
}
83028302
const MCExpr *Expr;
@@ -8320,7 +8320,7 @@ bool AMDGPUAsmParser::parsePrimaryExpr(const MCExpr *&Res, SMLoc &EndLoc) {
83208320
if (VK != AGVK::AGVK_None && peekToken().is(AsmToken::LParen)) {
83218321
lex(); // Eat 'max'/'or'
83228322
lex(); // Eat '('
8323-
return parseVariadicExpr(VK, Res, EndLoc);
8323+
return ParseVariadicExpr(VK, Res, EndLoc);
83248324
}
83258325
}
83268326
return getParser().parsePrimaryExpr(Res, EndLoc, nullptr);

llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCExpr.cpp

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ using namespace llvm;
1818

1919
const AMDGPUVariadicMCExpr *
2020
AMDGPUVariadicMCExpr::create(AMDGPUVariadicKind Kind,
21-
const std::vector<const MCExpr *> &Args,
22-
MCContext &Ctx) {
21+
ArrayRef<const MCExpr *> Args, MCContext &Ctx) {
2322
return new (Ctx) AMDGPUVariadicMCExpr(Kind, Args);
2423
}
2524

@@ -41,46 +40,47 @@ void AMDGPUVariadicMCExpr::printImpl(raw_ostream &OS,
4140
OS << "max(";
4241
break;
4342
}
44-
for (auto it = Args.begin(); it != Args.end(); ++it) {
45-
(*it)->print(OS, MAI, /*InParens=*/false);
46-
if ((it + 1) != Args.end())
43+
for (auto It = Args.begin(); It != Args.end(); ++It) {
44+
(*It)->print(OS, MAI, /*InParens=*/false);
45+
if ((It + 1) != Args.end())
4746
OS << ", ";
4847
}
4948
OS << ")";
5049
}
5150

5251
bool AMDGPUVariadicMCExpr::evaluateAsRelocatableImpl(
5352
MCValue &Res, const MCAsmLayout *Layout, const MCFixup *Fixup) const {
54-
int64_t total = 0;
53+
int64_t Total = INT64_MIN;
5554

5655
auto Op = [this](int64_t Arg1, int64_t Arg2) -> int64_t {
5756
switch (Kind) {
5857
default:
5958
llvm_unreachable("Unknown AMDGPUVariadicMCExpr kind.");
6059
case AGVK_Max:
61-
return Arg1 > Arg2 ? Arg1 : Arg2;
60+
return std::max(Arg1, Arg2);
6261
case AGVK_Or:
63-
return (!!Arg1) || (!!Arg2);
62+
return Arg1 || Arg2;
6463
}
6564
};
6665

6766
for (const MCExpr *Arg : Args) {
6867
MCValue ArgRes;
69-
if (!Arg->evaluateAsRelocatable(ArgRes, Layout, Fixup))
68+
if (!Arg->evaluateAsRelocatable(ArgRes, Layout, Fixup) ||
69+
!ArgRes.isAbsolute())
7070
return false;
71-
if (!ArgRes.isAbsolute())
72-
return false;
73-
total = Op(total, ArgRes.getConstant());
71+
72+
if (Total == INT64_MIN)
73+
Total = ArgRes.getConstant();
74+
Total = Op(Total, ArgRes.getConstant());
7475
}
7576

76-
Res = MCValue::get(total);
77+
Res = MCValue::get(Total);
7778
return true;
7879
}
7980

8081
void AMDGPUVariadicMCExpr::visitUsedExpr(MCStreamer &Streamer) const {
81-
for (const MCExpr *Arg : Args) {
82+
for (const MCExpr *Arg : Args)
8283
Streamer.visitUsedExpr(*Arg);
83-
}
8484
}
8585

8686
MCFragment *AMDGPUVariadicMCExpr::findAssociatedFragment() const {

llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCExpr.h

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,43 +9,44 @@
99
#ifndef LLVM_LIB_TARGET_AMDGPU_MCTARGETDESC_AMDGPUMCEXPR_H
1010
#define LLVM_LIB_TARGET_AMDGPU_MCTARGETDESC_AMDGPUMCEXPR_H
1111

12+
#include "llvm/ADT/ArrayRef.h"
13+
#include "llvm/ADT/SmallVector.h"
1214
#include "llvm/MC/MCExpr.h"
1315

1416
namespace llvm {
1517

16-
class AMDGPUMCExpr : public MCTargetExpr {
17-
static bool classof(const MCExpr *E) {
18-
return E->getKind() == MCExpr::Target;
19-
}
20-
void fixELFSymbolsInTLSFixups(MCAssembler &) const override{};
21-
};
22-
23-
class AMDGPUVariadicMCExpr : public AMDGPUMCExpr {
18+
/// AMDGPU target specific variadic MCExpr operations.
19+
///
20+
/// Takes in a minimum of 1 argument to be used with an operation. The supported
21+
/// operations are:
22+
/// - (logic) or
23+
/// - max
24+
///
25+
class AMDGPUVariadicMCExpr : public MCTargetExpr {
2426
public:
2527
enum AMDGPUVariadicKind { AGVK_None, AGVK_Or, AGVK_Max };
2628

2729
private:
2830
AMDGPUVariadicKind Kind;
29-
std::vector<const MCExpr *> Args;
31+
SmallVector<const MCExpr *, 2> Args;
3032

31-
AMDGPUVariadicMCExpr(AMDGPUVariadicKind Kind,
32-
const std::vector<const MCExpr *> &Args)
33+
AMDGPUVariadicMCExpr(AMDGPUVariadicKind Kind, ArrayRef<const MCExpr *> Args)
3334
: Kind(Kind), Args(Args) {
34-
assert(Args.size() >= 1 && "Can't take the maximum of 0 expressions.");
35+
assert(Args.size() >= 1 && "Needs a minimum of one expression.");
3536
}
3637

3738
public:
38-
static const AMDGPUVariadicMCExpr *
39-
create(AMDGPUVariadicKind Kind, const std::vector<const MCExpr *> &Args,
40-
MCContext &Ctx);
39+
static const AMDGPUVariadicMCExpr *create(AMDGPUVariadicKind Kind,
40+
ArrayRef<const MCExpr *> Args,
41+
MCContext &Ctx);
4142

42-
static const AMDGPUVariadicMCExpr *
43-
createOr(const std::vector<const MCExpr *> &Args, MCContext &Ctx) {
43+
static const AMDGPUVariadicMCExpr *createOr(ArrayRef<const MCExpr *> Args,
44+
MCContext &Ctx) {
4445
return create(AMDGPUVariadicKind::AGVK_Or, Args, Ctx);
4546
}
4647

47-
static const AMDGPUVariadicMCExpr *
48-
createMax(const std::vector<const MCExpr *> &Args, MCContext &Ctx) {
48+
static const AMDGPUVariadicMCExpr *createMax(ArrayRef<const MCExpr *> Args,
49+
MCContext &Ctx) {
4950
return create(AMDGPUVariadicKind::AGVK_Max, Args, Ctx);
5051
}
5152

@@ -57,8 +58,12 @@ class AMDGPUVariadicMCExpr : public AMDGPUMCExpr {
5758
const MCFixup *Fixup) const override;
5859
void visitUsedExpr(MCStreamer &Streamer) const override;
5960
MCFragment *findAssociatedFragment() const override;
61+
static bool classof(const MCExpr *E) {
62+
return E->getKind() == MCExpr::Target;
63+
}
64+
void fixELFSymbolsInTLSFixups(MCAssembler &) const override{};
6065
};
6166

6267
} // end namespace llvm
6368

64-
#endif // LLVM_LIB_TARGET_AMDGPU_MCTARGETDESC_AMDGPUMCEXPR_H
69+
#endif // LLVM_LIB_TARGET_AMDGPU_MCTARGETDESC_AMDGPUMCEXPR_H

llvm/test/MC/AMDGPU/mcexpr_amd.s

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
// OBJDUMP-NEXT: 000000000000000a l *ABS* 0000000000000000 max_literals
1616
// OBJDUMP-NEXT: 000000000000000f l *ABS* 0000000000000000 max_with_max_sym
1717
// OBJDUMP-NEXT: 000000000000000f l *ABS* 0000000000000000 max
18+
// OBJDUMP-NEXT: ffffffffffffffff l *ABS* 0000000000000000 neg_one
19+
// OBJDUMP-NEXT: ffffffffffffffff l *ABS* 0000000000000000 max_neg_numbers
20+
// OBJDUMP-NEXT: ffffffffffffffff l *ABS* 0000000000000000 max_neg_number
1821
// OBJDUMP-NEXT: 0000000000000003 l *ABS* 0000000000000000 max_with_subexpr
1922
// OBJDUMP-NEXT: 0000000000000006 l *ABS* 0000000000000000 max_as_subexpr
2023
// OBJDUMP-NEXT: 0000000000000005 l *ABS* 0000000000000000 max_recursive_subexpr
@@ -51,6 +54,13 @@
5154
.set max_literals, max(1,2,3,4,5,6,7,8,9,10)
5255
.set max_with_max_sym, max(max, 4, 3, one, two)
5356

57+
// ASM: .set max_neg_numbers, -1
58+
// ASM: .set max_neg_number, -1
59+
60+
.set neg_one, -1
61+
.set max_neg_numbers, max(-5, -4, -3, -2, neg_one)
62+
.set max_neg_number, max(neg_one)
63+
5464
// ASM: .set max_with_subexpr, 3
5565
// ASM: .set max_as_subexpr, 1+(max(4, 3, five))
5666
// ASM: .set max_recursive_subexpr, max(max(1, four), 3, max_expression_all)

0 commit comments

Comments
 (0)