diff options
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64InstrFormats.td | 68 | ||||
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64InstrInfo.td | 36 | ||||
| -rw-r--r-- | llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp | 51 | ||||
| -rw-r--r-- | llvm/test/MC/AArch64/basic-a64-diagnostics.s | 54 | 
4 files changed, 51 insertions, 158 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64InstrFormats.td b/llvm/lib/Target/AArch64/AArch64InstrFormats.td index d619137b55c..23e296722ba 100644 --- a/llvm/lib/Target/AArch64/AArch64InstrFormats.td +++ b/llvm/lib/Target/AArch64/AArch64InstrFormats.td @@ -480,76 +480,40 @@ def BranchTarget14Operand : BranchTarget<14>;  def BranchTarget26Operand : BranchTarget<26>;  def PCRelLabel19Operand   : PCRelLabel<19>; -def MovZSymbolG3AsmOperand : AsmOperandClass { -  let Name = "MovZSymbolG3"; +def MovWSymbolG3AsmOperand : AsmOperandClass { +  let Name = "MovWSymbolG3";    let RenderMethod = "addImmOperands";  } -def movz_symbol_g3 : Operand<i32> { -  let ParserMatchClass = MovZSymbolG3AsmOperand; +def movw_symbol_g3 : Operand<i32> { +  let ParserMatchClass = MovWSymbolG3AsmOperand;  } -def MovZSymbolG2AsmOperand : AsmOperandClass { -  let Name = "MovZSymbolG2"; +def MovWSymbolG2AsmOperand : AsmOperandClass { +  let Name = "MovWSymbolG2";    let RenderMethod = "addImmOperands";  } -def movz_symbol_g2 : Operand<i32> { -  let ParserMatchClass = MovZSymbolG2AsmOperand; +def movw_symbol_g2 : Operand<i32> { +  let ParserMatchClass = MovWSymbolG2AsmOperand;  } -def MovZSymbolG1AsmOperand : AsmOperandClass { -  let Name = "MovZSymbolG1"; +def MovWSymbolG1AsmOperand : AsmOperandClass { +  let Name = "MovWSymbolG1";    let RenderMethod = "addImmOperands";  } -def movz_symbol_g1 : Operand<i32> { -  let ParserMatchClass = MovZSymbolG1AsmOperand; +def movw_symbol_g1 : Operand<i32> { +  let ParserMatchClass = MovWSymbolG1AsmOperand;  } -def MovZSymbolG0AsmOperand : AsmOperandClass { -  let Name = "MovZSymbolG0"; +def MovWSymbolG0AsmOperand : AsmOperandClass { +  let Name = "MovWSymbolG0";    let RenderMethod = "addImmOperands";  } -def movz_symbol_g0 : Operand<i32> { -  let ParserMatchClass = MovZSymbolG0AsmOperand; -} - -def MovKSymbolG3AsmOperand : AsmOperandClass { -  let Name = "MovKSymbolG3"; -  let RenderMethod = "addImmOperands"; -} - -def movk_symbol_g3 : Operand<i32> { -  let ParserMatchClass = MovKSymbolG3AsmOperand; -} - -def MovKSymbolG2AsmOperand : AsmOperandClass { -  let Name = "MovKSymbolG2"; -  let RenderMethod = "addImmOperands"; -} - -def movk_symbol_g2 : Operand<i32> { -  let ParserMatchClass = MovKSymbolG2AsmOperand; -} - -def MovKSymbolG1AsmOperand : AsmOperandClass { -  let Name = "MovKSymbolG1"; -  let RenderMethod = "addImmOperands"; -} - -def movk_symbol_g1 : Operand<i32> { -  let ParserMatchClass = MovKSymbolG1AsmOperand; -} - -def MovKSymbolG0AsmOperand : AsmOperandClass { -  let Name = "MovKSymbolG0"; -  let RenderMethod = "addImmOperands"; -} - -def movk_symbol_g0 : Operand<i32> { -  let ParserMatchClass = MovKSymbolG0AsmOperand; +def movw_symbol_g0 : Operand<i32> { +  let ParserMatchClass = MovWSymbolG0AsmOperand;  }  class fixedpoint_i32<ValueType FloatVT> diff --git a/llvm/lib/Target/AArch64/AArch64InstrInfo.td b/llvm/lib/Target/AArch64/AArch64InstrInfo.td index eed53f36d57..c02c4646b3f 100644 --- a/llvm/lib/Target/AArch64/AArch64InstrInfo.td +++ b/llvm/lib/Target/AArch64/AArch64InstrInfo.td @@ -823,29 +823,29 @@ def : InstAlias<"movz $dst, $imm", (MOVZWi GPR32:$dst, imm0_65535:$imm, 0)>;  def : InstAlias<"movz $dst, $imm", (MOVZXi GPR64:$dst, imm0_65535:$imm, 0)>;  // Next, we have various ELF relocations with the ":XYZ_g0:sym" syntax. -def : InstAlias<"movz $Rd, $sym", (MOVZXi GPR64:$Rd, movz_symbol_g3:$sym, 48)>; -def : InstAlias<"movz $Rd, $sym", (MOVZXi GPR64:$Rd, movz_symbol_g2:$sym, 32)>; -def : InstAlias<"movz $Rd, $sym", (MOVZXi GPR64:$Rd, movz_symbol_g1:$sym, 16)>; -def : InstAlias<"movz $Rd, $sym", (MOVZXi GPR64:$Rd, movz_symbol_g0:$sym, 0)>; +def : InstAlias<"movz $Rd, $sym", (MOVZXi GPR64:$Rd, movw_symbol_g3:$sym, 48)>; +def : InstAlias<"movz $Rd, $sym", (MOVZXi GPR64:$Rd, movw_symbol_g2:$sym, 32)>; +def : InstAlias<"movz $Rd, $sym", (MOVZXi GPR64:$Rd, movw_symbol_g1:$sym, 16)>; +def : InstAlias<"movz $Rd, $sym", (MOVZXi GPR64:$Rd, movw_symbol_g0:$sym, 0)>; -def : InstAlias<"movn $Rd, $sym", (MOVNXi GPR64:$Rd, movz_symbol_g3:$sym, 48)>; -def : InstAlias<"movn $Rd, $sym", (MOVNXi GPR64:$Rd, movz_symbol_g2:$sym, 32)>; -def : InstAlias<"movn $Rd, $sym", (MOVNXi GPR64:$Rd, movz_symbol_g1:$sym, 16)>; -def : InstAlias<"movn $Rd, $sym", (MOVNXi GPR64:$Rd, movz_symbol_g0:$sym, 0)>; +def : InstAlias<"movn $Rd, $sym", (MOVNXi GPR64:$Rd, movw_symbol_g3:$sym, 48)>; +def : InstAlias<"movn $Rd, $sym", (MOVNXi GPR64:$Rd, movw_symbol_g2:$sym, 32)>; +def : InstAlias<"movn $Rd, $sym", (MOVNXi GPR64:$Rd, movw_symbol_g1:$sym, 16)>; +def : InstAlias<"movn $Rd, $sym", (MOVNXi GPR64:$Rd, movw_symbol_g0:$sym, 0)>; -def : InstAlias<"movk $Rd, $sym", (MOVKXi GPR64:$Rd, movk_symbol_g3:$sym, 48), 0>; -def : InstAlias<"movk $Rd, $sym", (MOVKXi GPR64:$Rd, movk_symbol_g2:$sym, 32), 0>; -def : InstAlias<"movk $Rd, $sym", (MOVKXi GPR64:$Rd, movk_symbol_g1:$sym, 16), 0>; -def : InstAlias<"movk $Rd, $sym", (MOVKXi GPR64:$Rd, movk_symbol_g0:$sym, 0), 0>; +def : InstAlias<"movk $Rd, $sym", (MOVKXi GPR64:$Rd, movw_symbol_g3:$sym, 48), 0>; +def : InstAlias<"movk $Rd, $sym", (MOVKXi GPR64:$Rd, movw_symbol_g2:$sym, 32), 0>; +def : InstAlias<"movk $Rd, $sym", (MOVKXi GPR64:$Rd, movw_symbol_g1:$sym, 16), 0>; +def : InstAlias<"movk $Rd, $sym", (MOVKXi GPR64:$Rd, movw_symbol_g0:$sym, 0), 0>; -def : InstAlias<"movz $Rd, $sym", (MOVZWi GPR32:$Rd, movz_symbol_g1:$sym, 16)>; -def : InstAlias<"movz $Rd, $sym", (MOVZWi GPR32:$Rd, movz_symbol_g0:$sym, 0)>; +def : InstAlias<"movz $Rd, $sym", (MOVZWi GPR32:$Rd, movw_symbol_g1:$sym, 16)>; +def : InstAlias<"movz $Rd, $sym", (MOVZWi GPR32:$Rd, movw_symbol_g0:$sym, 0)>; -def : InstAlias<"movn $Rd, $sym", (MOVNWi GPR32:$Rd, movz_symbol_g1:$sym, 16)>; -def : InstAlias<"movn $Rd, $sym", (MOVNWi GPR32:$Rd, movz_symbol_g0:$sym, 0)>; +def : InstAlias<"movn $Rd, $sym", (MOVNWi GPR32:$Rd, movw_symbol_g1:$sym, 16)>; +def : InstAlias<"movn $Rd, $sym", (MOVNWi GPR32:$Rd, movw_symbol_g0:$sym, 0)>; -def : InstAlias<"movk $Rd, $sym", (MOVKWi GPR32:$Rd, movk_symbol_g1:$sym, 16), 0>; -def : InstAlias<"movk $Rd, $sym", (MOVKWi GPR32:$Rd, movk_symbol_g0:$sym, 0), 0>; +def : InstAlias<"movk $Rd, $sym", (MOVKWi GPR32:$Rd, movw_symbol_g1:$sym, 16), 0>; +def : InstAlias<"movk $Rd, $sym", (MOVKWi GPR32:$Rd, movw_symbol_g0:$sym, 0), 0>;  // Final group of aliases covers true "mov $Rd, $imm" cases.  multiclass movw_mov_alias<string basename,Instruction INST, RegisterClass GPR, diff --git a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp index f4c55d48d21..21a8b66b5c8 100644 --- a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp +++ b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp @@ -935,48 +935,31 @@ public:      return false;    } -  bool isMovZSymbolG3() const { +  bool isMovWSymbolG3() const {      return isMovWSymbol(AArch64MCExpr::VK_ABS_G3);    } -  bool isMovZSymbolG2() const { -    return isMovWSymbol({AArch64MCExpr::VK_ABS_G2, AArch64MCExpr::VK_ABS_G2_S, -                         AArch64MCExpr::VK_TPREL_G2, -                         AArch64MCExpr::VK_DTPREL_G2}); -  } - -  bool isMovZSymbolG1() const { -    return isMovWSymbol({ -        AArch64MCExpr::VK_ABS_G1, AArch64MCExpr::VK_ABS_G1_S, -        AArch64MCExpr::VK_GOTTPREL_G1, AArch64MCExpr::VK_TPREL_G1, -        AArch64MCExpr::VK_DTPREL_G1, -    }); -  } - -  bool isMovZSymbolG0() const { -    return isMovWSymbol({AArch64MCExpr::VK_ABS_G0, AArch64MCExpr::VK_ABS_G0_S, -                         AArch64MCExpr::VK_TPREL_G0, -                         AArch64MCExpr::VK_DTPREL_G0}); -  } - -  bool isMovKSymbolG3() const { -    return isMovWSymbol(AArch64MCExpr::VK_ABS_G3); -  } - -  bool isMovKSymbolG2() const { -    return isMovWSymbol(AArch64MCExpr::VK_ABS_G2_NC); +  bool isMovWSymbolG2() const { +    return isMovWSymbol( +        {AArch64MCExpr::VK_ABS_G2, AArch64MCExpr::VK_ABS_G2_S, +         AArch64MCExpr::VK_ABS_G2_NC, AArch64MCExpr::VK_TPREL_G2, +         AArch64MCExpr::VK_DTPREL_G2});    } -  bool isMovKSymbolG1() const { -    return isMovWSymbol({AArch64MCExpr::VK_ABS_G1_NC, -                         AArch64MCExpr::VK_TPREL_G1_NC, -                         AArch64MCExpr::VK_DTPREL_G1_NC}); +  bool isMovWSymbolG1() const { +    return isMovWSymbol( +        {AArch64MCExpr::VK_ABS_G1, AArch64MCExpr::VK_ABS_G1_S, +         AArch64MCExpr::VK_ABS_G1_NC, AArch64MCExpr::VK_GOTTPREL_G1, +         AArch64MCExpr::VK_TPREL_G1, AArch64MCExpr::VK_TPREL_G1_NC, +         AArch64MCExpr::VK_DTPREL_G1, AArch64MCExpr::VK_DTPREL_G1_NC});    } -  bool isMovKSymbolG0() const { +  bool isMovWSymbolG0() const {      return isMovWSymbol( -        {AArch64MCExpr::VK_ABS_G0_NC, AArch64MCExpr::VK_GOTTPREL_G0_NC, -         AArch64MCExpr::VK_TPREL_G0_NC, AArch64MCExpr::VK_DTPREL_G0_NC}); +        {AArch64MCExpr::VK_ABS_G0, AArch64MCExpr::VK_ABS_G0_S, +         AArch64MCExpr::VK_ABS_G0_NC, AArch64MCExpr::VK_GOTTPREL_G0_NC, +         AArch64MCExpr::VK_TPREL_G0, AArch64MCExpr::VK_TPREL_G0_NC, +         AArch64MCExpr::VK_DTPREL_G0, AArch64MCExpr::VK_DTPREL_G0_NC});    }    template<int RegWidth, int Shift> diff --git a/llvm/test/MC/AArch64/basic-a64-diagnostics.s b/llvm/test/MC/AArch64/basic-a64-diagnostics.s index 7f462af2fd8..a0807eacd46 100644 --- a/llvm/test/MC/AArch64/basic-a64-diagnostics.s +++ b/llvm/test/MC/AArch64/basic-a64-diagnostics.s @@ -3216,35 +3216,11 @@  // CHECK-ERROR:  error: invalid operand for instruction  // CHECK-ERROR-NEXT:         movz x12, #:abs_g0:sym, lsl #0  // CHECK-ERROR-NEXT:                                 ^ -// CHECK-ERROR-AARCH64-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-AARCH64-NEXT:         movn x2, #:abs_g0:sym -// CHECK-ERROR-AARCH64-NEXT:                  ^ -// CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT:         movk w3, #:abs_g0:sym -// CHECK-ERROR-NEXT:                  ^ -// CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT:         movz x3, #:abs_g0_nc:sym -// CHECK-ERROR-NEXT:                  ^ -// CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT:         movn x4, #:abs_g0_nc:sym -// CHECK-ERROR-NEXT:                  ^          movn x2, #:abs_g1:sym          movk w3, #:abs_g1:sym          movz x3, #:abs_g1_nc:sym          movn x4, #:abs_g1_nc:sym -// CHECK-ERROR-AARCH64: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-AARCH64-NEXT:         movn x2, #:abs_g1:sym -// CHECK-ERROR-AARCH64-NEXT:                  ^ -// CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT:         movk w3, #:abs_g1:sym -// CHECK-ERROR-NEXT:                  ^ -// CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT:         movz x3, #:abs_g1_nc:sym -// CHECK-ERROR-NEXT:                  ^ -// CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT:         movn x4, #:abs_g1_nc:sym -// CHECK-ERROR-NEXT:                  ^          movz w12, #:abs_g2:sym          movn x12, #:abs_g2:sym @@ -3255,28 +3231,13 @@  // CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]  // CHECK-ERROR-NEXT:         movz w12, #:abs_g2:sym  // CHECK-ERROR-NEXT:                   ^ -// CHECK-ERROR-AARCH64-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-AARCH64-NEXT:         movn x12, #:abs_g2:sym -// CHECK-ERROR-AARCH64-NEXT:                   ^ -// CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT:         movk x13, #:abs_g2:sym -// CHECK-ERROR-NEXT:                   ^  // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]  // CHECK-ERROR-NEXT:         movk w3, #:abs_g2_nc:sym  // CHECK-ERROR-NEXT:                  ^ -// CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT:         movz x13, #:abs_g2_nc:sym -// CHECK-ERROR-NEXT:                   ^ -// CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT:         movn x24, #:abs_g2_nc:sym -// CHECK-ERROR-NEXT:                   ^          movn x19, #:abs_g3:sym          movz w20, #:abs_g3:sym          movk w21, #:abs_g3:sym -// CHECK-ERROR-AARCH64: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-AARCH64-NEXT:         movn x19, #:abs_g3:sym -// CHECK-ERROR-AARCH64-NEXT:                   ^  // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]  // CHECK-ERROR-NEXT:         movz w20, #:abs_g3:sym  // CHECK-ERROR-NEXT:                   ^ @@ -3286,21 +3247,9 @@          movk x19, #:abs_g0_s:sym          movk w23, #:abs_g0_s:sym -// CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT:         movk x19, #:abs_g0_s:sym -// CHECK-ERROR-NEXT:                   ^ -// CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT:         movk w23, #:abs_g0_s:sym -// CHECK-ERROR-NEXT:                   ^          movk x19, #:abs_g1_s:sym          movk w23, #:abs_g1_s:sym -// CHECK-ERROR: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT:         movk x19, #:abs_g1_s:sym -// CHECK-ERROR-NEXT:                   ^ -// CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT:         movk w23, #:abs_g1_s:sym -// CHECK-ERROR-NEXT:                   ^          movz w2, #:abs_g2_s:sym          movn w29, #:abs_g2_s:sym @@ -3313,9 +3262,6 @@  // CHECK-ERROR-NEXT:         movn w29, #:abs_g2_s:sym  // CHECK-ERROR-NEXT:                   ^  // CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535] -// CHECK-ERROR-NEXT:         movk x19, #:abs_g2_s:sym -// CHECK-ERROR-NEXT:                   ^ -// CHECK-ERROR-NEXT: error: {{expected relocated symbol or|immediate must be an}} integer in range [0, 65535]  // CHECK-ERROR-NEXT:         movk w23, #:abs_g2_s:sym  // CHECK-ERROR-NEXT:                   ^  | 

