mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
c219487139
Summary: TableGen interprets braces ('{}') in the asm string of instruction aliases as variants but when defining aliases with literal braces they have to be escaped to prevent them being removed. Braces are escaped with '\\', for example: def FooBraces : InstAlias<"foo \\{$imm\\}", (foo IntOperand:$imm)>; Although when TableGen is emitting the assembly writer (-gen-asm-writer) the AsmString that gets emitted is: AsmString = "foo \{$\x01\}"; In c/c++ braces don't need to be escaped which causes compilation warnings: warning: use of non-standard escape character '\{' [-Wpedantic] This patch fixes the issue by unescaping the flattened alias asm string in the asm writer, by replacing '\{\}' with '{}'. Reviewed By: hfinkel Differential Revision: https://reviews.llvm.org/D79991
29 lines
648 B
TableGen
29 lines
648 B
TableGen
// RUN: llvm-tblgen -gen-asm-writer -I %p/../../include %s | FileCheck %s
|
|
|
|
include "llvm/Target/Target.td"
|
|
|
|
def ArchInstrInfo : InstrInfo { }
|
|
|
|
def Arch : Target {
|
|
let InstructionSet = ArchInstrInfo;
|
|
}
|
|
|
|
def Reg : Register<"reg">;
|
|
|
|
def RegClass : RegisterClass<"foo", [i32], 0, (add Reg)>;
|
|
|
|
def IntOperand: Operand<i32>;
|
|
|
|
def foo : Instruction {
|
|
let Size = 2;
|
|
let OutOperandList = (outs);
|
|
let InOperandList = (ins IntOperand:$imm);
|
|
let AsmString = "foo $imm";
|
|
let Namespace = "Arch";
|
|
}
|
|
|
|
def FooBraces : InstAlias<"foo \\{$imm\\}", (foo IntOperand:$imm)>;
|
|
|
|
// CHECK: static const char AsmStrings[] =
|
|
// CHECK-NEXT: /* 0 */ "foo {$\x01}\0"
|