[llvm] fe3760e - NVPTX: Implement printMCExpr with generic print
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Sat Jun 7 11:02:50 PDT 2025
Author: Fangrui Song
Date: 2025-06-07T11:02:45-07:00
New Revision: fe3760eb031b108a954e1adc43f260aeb236c1d1
URL: https://github.com/llvm/llvm-project/commit/fe3760eb031b108a954e1adc43f260aeb236c1d1
DIFF: https://github.com/llvm/llvm-project/commit/fe3760eb031b108a954e1adc43f260aeb236c1d1.diff
LOG: NVPTX: Implement printMCExpr with generic print
3d2a976197ce4060e7576fa3ce67f87fa8cff126 (2015) copied and adapted
the generic printer to reduce parentheses, which is unnecessary after #133674.
Added:
Modified:
llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp b/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
index e123849066e1d..a1f528c4379eb 100644
--- a/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
+++ b/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
@@ -1849,75 +1849,8 @@ NVPTXAsmPrinter::lowerConstantForGV(const Constant *CV,
report_fatal_error(Twine(OS.str()));
}
-// Copy of MCExpr::print customized for NVPTX
void NVPTXAsmPrinter::printMCExpr(const MCExpr &Expr, raw_ostream &OS) const {
- switch (Expr.getKind()) {
- case MCExpr::Target:
- return cast<MCTargetExpr>(&Expr)->printImpl(OS, MAI);
- case MCExpr::Constant:
- OS << cast<MCConstantExpr>(Expr).getValue();
- return;
-
- case MCExpr::SymbolRef: {
- const MCSymbolRefExpr &SRE = cast<MCSymbolRefExpr>(Expr);
- const MCSymbol &Sym = SRE.getSymbol();
- Sym.print(OS, MAI);
- return;
- }
-
- case MCExpr::Unary: {
- const MCUnaryExpr &UE = cast<MCUnaryExpr>(Expr);
- switch (UE.getOpcode()) {
- case MCUnaryExpr::LNot: OS << '!'; break;
- case MCUnaryExpr::Minus: OS << '-'; break;
- case MCUnaryExpr::Not: OS << '~'; break;
- case MCUnaryExpr::Plus: OS << '+'; break;
- }
- printMCExpr(*UE.getSubExpr(), OS);
- return;
- }
-
- case MCExpr::Binary: {
- const MCBinaryExpr &BE = cast<MCBinaryExpr>(Expr);
-
- // Only print parens around the LHS if it is non-trivial.
- if (isa<MCConstantExpr>(BE.getLHS()) || isa<MCSymbolRefExpr>(BE.getLHS()) ||
- isa<NVPTXGenericMCSymbolRefExpr>(BE.getLHS())) {
- printMCExpr(*BE.getLHS(), OS);
- } else {
- OS << '(';
- printMCExpr(*BE.getLHS(), OS);
- OS<< ')';
- }
-
- switch (BE.getOpcode()) {
- case MCBinaryExpr::Add:
- // Print "X-42" instead of "X+-42".
- if (const MCConstantExpr *RHSC = dyn_cast<MCConstantExpr>(BE.getRHS())) {
- if (RHSC->getValue() < 0) {
- OS << RHSC->getValue();
- return;
- }
- }
-
- OS << '+';
- break;
- default: llvm_unreachable("Unhandled binary operator");
- }
-
- // Only print parens around the LHS if it is non-trivial.
- if (isa<MCConstantExpr>(BE.getRHS()) || isa<MCSymbolRefExpr>(BE.getRHS())) {
- printMCExpr(*BE.getRHS(), OS);
- } else {
- OS << '(';
- printMCExpr(*BE.getRHS(), OS);
- OS << ')';
- }
- return;
- }
- }
-
- llvm_unreachable("Invalid expression kind!");
+ Expr.print(OS, OutContext.getAsmInfo());
}
/// PrintAsmOperand - Print out an operand for an inline asm expression.
More information about the llvm-commits
mailing list