]> granicus.if.org Git - llvm/commit
[SystemZ] Add remaining branch instructions
authorUlrich Weigand <ulrich.weigand@de.ibm.com>
Mon, 28 Nov 2016 13:40:08 +0000 (13:40 +0000)
committerUlrich Weigand <ulrich.weigand@de.ibm.com>
Mon, 28 Nov 2016 13:40:08 +0000 (13:40 +0000)
commit3079ca7f0ca820c666cc52db1bfdd54a8ce5f11f
tree117c370d7c81f9f50534558c30ac4b2b32d0a4f3
parent0291833580b27988e87084dc6433f5c9cd777f9e
[SystemZ] Add remaining branch instructions

This patch adds assembler support for the remaining branch instructions:
the non-relative branch on count variants, and all variants of branch
on index.

The only one of those that can be readily exploited for code generation
is BRCTH (branch on count using a high 32-bit register as count).  Do
use it, however, it is necessary to also introduce a hew CHIMux pseudo
to allow comparisons of a 32-bit value agains a short immediate to go
into a high register as well (implemented via CHI/CIH).

This causes a bit of codegen changes overall, but those have proven to
be neutral (or even beneficial) in performance measurements.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288029 91177308-0d34-0410-b5e6-96231b3b80d8
15 files changed:
lib/Target/SystemZ/SystemZElimCompare.cpp
lib/Target/SystemZ/SystemZInstrFormats.td
lib/Target/SystemZ/SystemZInstrInfo.cpp
lib/Target/SystemZ/SystemZInstrInfo.td
lib/Target/SystemZ/SystemZLongBranch.cpp
lib/Target/SystemZ/SystemZScheduleZ13.td
lib/Target/SystemZ/SystemZScheduleZ196.td
lib/Target/SystemZ/SystemZScheduleZEC12.td
test/CodeGen/SystemZ/loop-02.ll [new file with mode: 0644]
test/MC/Disassembler/SystemZ/insns-pcrel.txt
test/MC/Disassembler/SystemZ/insns.txt
test/MC/SystemZ/insn-bad-z196.s
test/MC/SystemZ/insn-bad.s
test/MC/SystemZ/insn-good-z196.s
test/MC/SystemZ/insn-good.s