diff --git a/llvm/lib/Target/ARM/ARMInstrThumb2.td b/llvm/lib/Target/ARM/ARMInstrThumb2.td index d189b8e78987bb..5f7cfa371ff107 100644 --- a/llvm/lib/Target/ARM/ARMInstrThumb2.td +++ b/llvm/lib/Target/ARM/ARMInstrThumb2.td @@ -2683,7 +2683,7 @@ def : T2Pat<(ARMusat (sra GPRnopc:$Rn, asr_imm:$shft), imm0_31:$pos), defm t2LSL : T2I_sh_ir<0b00, "lsl", imm1_31, shl>; defm t2LSR : T2I_sh_ir<0b01, "lsr", imm_sr, srl>; defm t2ASR : T2I_sh_ir<0b10, "asr", imm_sr, sra>; -defm t2ROR : T2I_sh_ir<0b11, "ror", imm0_31, rotr>; +defm t2ROR : T2I_sh_ir<0b11, "ror", imm1_31, rotr>; // LSL #0 is actually MOV, and has slightly different permitted registers to // LSL with non-zero shift diff --git a/llvm/test/MC/ARM/thumb2-diagnostics.s b/llvm/test/MC/ARM/thumb2-diagnostics.s index 1154e5a9069a1f..45efd3c62120c1 100644 --- a/llvm/test/MC/ARM/thumb2-diagnostics.s +++ b/llvm/test/MC/ARM/thumb2-diagnostics.s @@ -49,6 +49,12 @@ @ CHECK-ERRORS-V7: operand must be an immediate in the range [0,15] @ CHECK-ERRORS-V8: invalid instruction + @ Out of range immediate for ROR. + @ (Assembling this instruction to "mov r1, r1" might also be OK.) + ror r1, r1, #0 +@ CHECK-ERRORS: invalid instruction +@ CHECK-ERRORS: operand must be an immediate in the range [1,31] + isb #-1 isb #16 @ CHECK-ERRORS: error: immediate value out of range