llvm-6502/test/CodeGen/ARM/jumptable-label.ll
Tim Northover 876dd978b8 ARM: recommit r237590: allow jump tables to be placed as constant islands.
The original version didn't properly account for the base register
being modified before the final jump, so caused miscompilations in
Chromium and LLVM. I've fixed this and tested with an LLVM self-host
(I don't have the means to build & test Chromium).

The general idea remains the same: in pathological cases jump tables
can be too far away from the instructions referencing them (like other
constants) so they need to be movable.

Should fix PR23627.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238680 91177308-0d34-0410-b5e6-96231b3b80d8
2015-05-31 19:22:07 +00:00

34 lines
1021 B
LLVM

; RUN: llc < %s -mtriple thumbv6-apple-macosx10.6.0 | FileCheck %s
; test that we print the label of a bb that is only used in a jump table.
; CHECK: .long [[JUMPTABLE_DEST:LBB[0-9]+_[0-9]+]]
; CHECK: [[JUMPTABLE_DEST]]:
define i32 @calculate() {
entry:
switch i32 undef, label %return [
i32 1, label %sw.bb
i32 2, label %sw.bb6
i32 3, label %sw.bb13
i32 4, label %sw.bb20
]
sw.bb: ; preds = %entry
br label %return
sw.bb6: ; preds = %entry
br label %return
sw.bb13: ; preds = %entry
br label %return
sw.bb20: ; preds = %entry
%div = sdiv i32 undef, undef
br label %return
return: ; preds = %sw.bb20, %sw.bb13, %sw.bb6, %sw.bb, %entry
%retval.0 = phi i32 [ %div, %sw.bb20 ], [ undef, %sw.bb13 ], [ undef, %sw.bb6 ], [ undef, %sw.bb ], [ 0, %entry ]
ret i32 %retval.0
}