diff options
Diffstat (limited to 'test/MC/ARM/unpred-control-flow-in-it-block.s')
-rw-r--r-- | test/MC/ARM/unpred-control-flow-in-it-block.s | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/test/MC/ARM/unpred-control-flow-in-it-block.s b/test/MC/ARM/unpred-control-flow-in-it-block.s new file mode 100644 index 0000000000000..885d158d83dd3 --- /dev/null +++ b/test/MC/ARM/unpred-control-flow-in-it-block.s @@ -0,0 +1,57 @@ +@ RUN: not llvm-mc -triple=thumbv7m--none-eabi < %s 2>&1 | FileCheck %s + +@ These instructions all write to the PC, so are UNPREDICTABLE if they are in +@ an IT block, but not the last instruction in the block. + + itttt eq + addeq pc, r0 +@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block + addeq pc, sp, pc +@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block + beq.n #.+0x20 +@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block + nopeq + itttt eq + beq.w #.+0x20 +@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block + bleq sym +@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block + blxeq r0 +@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block + nopeq + itttt eq + bxeq r0 +@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block + ldmeq r0, {r8, pc} +@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block + ldmdbeq r0, {r8, pc} +@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block + nopeq + itttt eq + ldreq pc, [r0, #4] +@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block + ldreq pc, [r0, #-4] +@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block + ldreq pc, [pc, #4] +@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block + nopeq + itttt eq + ldreq pc, [r0, r1, LSL #1] +@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block + moveq pc, r0 +@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block + popeq {r0, pc} +@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block + nopeq + itttt eq + popeq {r8, pc} +@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block + popeq {pc} +@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block + tbbeq [r0, r1] +@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block + nopeq + itt eq + tbheq [r0, r1, LSL #1] +@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block + nopeq |