Files
clang-p2996/llvm/test/CodeGen/M68k/Encoding/Relaxations/branch.mir
Min-Yih Hsu 657bb7262d [M68k] Separate ADDA from ADD and migrate rest of the arithmetic MC tests
Previously ADD & ADDA (as well as SUB & SUBA) instructions are mixed
together, which not only violated Motorola assembly's syntax but also
made asm parsing more difficult. This patch separates these two kinds of
instructions migrate rest of the tests from
test/CodeGen/M68k/Encoding/Arithmetic to test/MC/M68k/Arithmetic.

Note that we observed minor regressions on codegen quality: Sometimes
isel uses ADD instead of ADDA even the latter can lead to shorter
sequence of code. This issue implies that some isel patterns might need
to be updated.
2021-08-07 17:19:12 -07:00

115 lines
3.6 KiB
YAML

# RUN: llc %s -mtriple=m68k -start-after=prologepilog -O0 -filetype=obj \
# RUN: -code-model=small -relocation-model=pic -o - \
# RUN: | extract-section .text -h \
# RUN: | FileCheck %s
#------------------------------------------------------------------------------
# Test branch relaxation. By default codegen choses smallest branch instruction,
# during object code generation it might get clear that offset does not fit and
# bigger instruction is required.
#------------------------------------------------------------------------------
--- # TIGHT
# The offset for the small branch is from the PC value, which points to the
# next instruction, because there is no extension word here.
# 000 CHECK: 6078
# 002 CHECK-SAME: 23f9 0000 0000 0000 0000
# 00C CHECK-SAME: 23f9 0000 0000 0000 0000
# 016 CHECK-SAME: 23f9 0000 0000 0000 0000
# 020 CHECK-SAME: 23f9 0000 0000 0000 0000
# 02A CHECK-SAME: 23f9 0000 0000 0000 0000
# 034 CHECK-SAME: 23f9 0000 0000 0000 0000
# 03E CHECK-SAME: 23f9 0000 0000 0000 0000
# 048 CHECK-SAME: 23f9 0000 0000 0000 0000
# 052 CHECK-SAME: 23f9 0000 0000 0000 0000
# 05C CHECK-SAME: 23f9 0000 0000 0000 0000
# 066 CHECK-SAME: 23f9 0000 0000 0000 0000
# 070 CHECK-SAME: 23f9 0000 0000 0000 0000
# 07A CHECK-SAME: d0bc 0000 0000
# 080 CHECK-SAME: 4e75
name: TIGHT
body: |
bb.0:
successors: %bb.2
BRA8 %bb.2
bb.1:
MOV32bb 0, 0, implicit-def $ccr
MOV32bb 0, 0, implicit-def $ccr
MOV32bb 0, 0, implicit-def $ccr
MOV32bb 0, 0, implicit-def $ccr
MOV32bb 0, 0, implicit-def $ccr
MOV32bb 0, 0, implicit-def $ccr
MOV32bb 0, 0, implicit-def $ccr
MOV32bb 0, 0, implicit-def $ccr
MOV32bb 0, 0, implicit-def $ccr
MOV32bb 0, 0, implicit-def $ccr
MOV32bb 0, 0, implicit-def $ccr
MOV32bb 0, 0, implicit-def $ccr
bb.2:
$d0 = ADD32di $d0, 0, implicit-def $ccr
RET 0, $d0
...
--- # RELAXED
# 084 CHECK-SAME 6000 0084
# 088 CHECK-SAME: 23f9 0000 0000 0000 0000
# 092 CHECK-SAME: 23f9 0000 0000 0000 0000
# 09C CHECK-SAME: 23f9 0000 0000 0000 0000
# 0A6 CHECK-SAME: 23f9 0000 0000 0000 0000
# 0B0 CHECK-SAME: 23f9 0000 0000 0000 0000
# 0BA CHECK-SAME: 23f9 0000 0000 0000 0000
# 0C4 CHECK-SAME: 23f9 0000 0000 0000 0000
# 0CE CHECK-SAME: 23f9 0000 0000 0000 0000
# 0D8 CHECK-SAME: 23f9 0000 0000 0000 0000
# 0E2 CHECK-SAME: 23f9 0000 0000 0000 0000
# 0EC CHECK-SAME: 23f9 0000 0000 0000 0000
# 0F6 CHECK-SAME: 23f9 0000 0000 0000 0000
# 100 CHECK-SAME: 23f9 0000 0000 0000 0000
# 10A CHECK-SAME: d0bc 0000 0000
# 110 CHECK-SAME: 4e75
name: RELAXED
body: |
bb.0:
successors: %bb.2
BRA8 %bb.2
bb.1:
MOV32bb 0, 0, implicit-def $ccr
MOV32bb 0, 0, implicit-def $ccr
MOV32bb 0, 0, implicit-def $ccr
MOV32bb 0, 0, implicit-def $ccr
MOV32bb 0, 0, implicit-def $ccr
MOV32bb 0, 0, implicit-def $ccr
MOV32bb 0, 0, implicit-def $ccr
MOV32bb 0, 0, implicit-def $ccr
MOV32bb 0, 0, implicit-def $ccr
MOV32bb 0, 0, implicit-def $ccr
MOV32bb 0, 0, implicit-def $ccr
MOV32bb 0, 0, implicit-def $ccr
MOV32bb 0, 0, implicit-def $ccr
bb.2:
$d0 = ADD32di $d0, 0, implicit-def $ccr
RET 0, $d0
...
--- # ZERO
# Because of the way M68k encodes branches it is not possible to encode 0
# offset with the smallest insruction(0 in the offset field means exension word
# is used) thus we switch to the wider instruction.
# 114 CHECK-SAME: 6000 0002
# 118 CHECK-SAME: d0bc 0000 0000
# 11E CHECK-SAME: 4e75
name: ZERO
body: |
bb.0:
successors: %bb.1
BRA8 %bb.1
bb.1:
$d0 = ADD32di $d0, 0, implicit-def $ccr
RET 0, $d0
...