Index: lib/Target/ARM/ARMConstantIslandPass.cpp =================================================================== --- lib/Target/ARM/ARMConstantIslandPass.cpp +++ lib/Target/ARM/ARMConstantIslandPass.cpp @@ -1952,7 +1952,9 @@ DEBUG(dbgs() << "Shrink JT: " << *MI << " addr: " << *AddrMI << " lea: " << *LeaMI); unsigned Opc = ByteOk ? ARM::t2TBB_JT : ARM::t2TBH_JT; - MachineInstr *NewJTMI = BuildMI(MBB, MI->getDebugLoc(), TII->get(Opc)) + MachineBasicBlock::iterator MI_JT = MI; + MachineInstr *NewJTMI = + BuildMI(*MBB, MI_JT, MI->getDebugLoc(), TII->get(Opc)) .addReg(IdxReg, getKillRegState(IdxRegKill)) .addJumpTableIndex(JTI, JTOP.getTargetFlags()) .addImm(MI->getOperand(JTOpIdx+1).getImm()); Index: test/CodeGen/Thumb2/constant-islands-jump-table.ll =================================================================== --- /dev/null +++ test/CodeGen/Thumb2/constant-islands-jump-table.ll @@ -0,0 +1,469 @@ +; RUN: llc < %s -mtriple=thumbv7-linux-gnueabihf -O1 %s -o - | FileCheck %s + +; CHECK: b .LBB +; CHECK-NOT: tbh + +define i32 @test_jump_table(i32 %x, float %in) { + +h1: + ; %val0 = load i32* %addr, align 4 + ; %addr1 = getelementptr i32* %addr, i32 1 + ; %addr2 = getelementptr i32* %addr, i32 2 + ; %addr3 = getelementptr i32* %addr, i32 3 + ; %addr4 = getelementptr i32* %addr, i32 4 + ; %val1 = load i32* %addr1, align 4 + ; %val2 = load i32* %addr2, align 4 + ; %val3 = load i32* %addr3, align 4 + ; %val4 = load i32* %addr4, align 4 + + ;%b2 = add i32 %x, %x + ;%b3 = mul i32 %b2, 3 + ;%b4 = add i32 %b3, %b2 + ;%b5 = add i32 %b4, %b3 + ;%b6 = add i32 %b5, 10 + ;%b7 = add i32 %b6, %b4 + ;%tst1 = icmp ugt i32 %b2, 6 + ;br i1 %tst1, label %h6, label %h1_2 + +;h1_2: + %b0 = fadd float %in, 1234.5 + %b1 = fptoui float %b0 to i32 + + switch i32 %x, label %h2 [ + i32 0, label %h3 + i32 2, label %h4 + i32 4, label %h5 + i32 6, label %h6 + ] + +h2: + %a0 = add i32 %x, 5 + br label %h3 + +h3: + %d2 = phi i32 [%b1, %h1], [%a0, %h2] + %d3 = add i32 %d2, 8 + %d4 = add i32 %d3, %d3 + %d5 = add i32 %d4, 12 + %d6 = add i32 %d5, %d4 + %d7 = add i32 %d6, %d3 + %d8 = add i32 %d6, %d7 + %d9 = add i32 %d8, %d8 + %d10 = add i32 %d9, %d5 + %d11 = add i32 %d6, %d10 + %d12 = add i32 %d3, %d11 + %d13 = add i32 %d9, %d12 + %d14 = mul i32 %d7, %d13 + %d15 = add i32 %d2, %d14 + %d16 = add i32 %d5, %d15 + %d17 = mul i32 %d6, %d16 + %d18 = add i32 %d8, %d17 + %d19 = add i32 %d10, %d18 + %d20 = add i32 %d19, 8 + %d21 = add i32 %d20, %d3 + %d22 = add i32 %d21, 12 + %d23 = add i32 %d22, %d4 + %d24 = add i32 %d23, %d3 + %d25 = add i32 %d24, %d7 + %d26 = add i32 %d25, %d8 + %d27 = add i32 %d26, %d5 + %d28 = add i32 %d27, %d10 + %d29 = add i32 %d28, %d11 + %d30 = add i32 %d29, %d12 + %d31 = mul i32 %d30, %d13 + %d32 = add i32 %d31, %d14 + %d33 = add i32 %d32, %d15 + %d34 = mul i32 %d33, %d16 + %d35 = add i32 %d34, %d17 + %d36 = add i32 %d35, %d18 + %d37 = add i32 %d36, 8 + %d38 = add i32 %d37, %d3 + %d39 = add i32 %d38, 12 + %d40 = add i32 %d39, %d4 + %d41 = add i32 %d40, %d3 + %d42 = add i32 %d41, %d7 + %d43 = add i32 %d42, %d8 + %d44 = add i32 %d43, %d5 + %d45 = add i32 %d44, %d10 + %d46 = add i32 %d45, %d11 + %d47 = add i32 %d46, %d12 + %d48 = mul i32 %d47, %d13 + %d49 = add i32 %d48, %d14 + %d50 = add i32 %d49, %d15 + %d51 = mul i32 %d50, %d16 + %d52 = add i32 %d51, %d17 + %d53 = add i32 %d52, %d18 + %d54 = add i32 %d53, 8 + %d55 = add i32 %d54, %d3 + %d56 = add i32 %d55, 12 + %d57 = add i32 %d56, %d4 + %d58 = add i32 %d57, %d3 + %d59 = add i32 %d58, %d7 + %d60 = add i32 %d59, %d8 + %d61 = add i32 %d60, %d5 + %d62 = add i32 %d61, %d10 + %d63 = add i32 %d62, %d11 + %d64 = add i32 %d63, %d12 + %d65 = mul i32 %d64, %d13 + %d66 = add i32 %d65, %d14 + %d67 = add i32 %d66, %d15 + %d68 = mul i32 %d67, %d16 + %d69 = add i32 %d68, %d17 + %d70 = add i32 %d69, %d18 + %d71 = add i32 %d70, 8 + %d72 = add i32 %d71, %d3 + %d73 = add i32 %d72, 12 + %d74 = add i32 %d73, %d4 + %d75 = add i32 %d74, %d3 + %d76 = add i32 %d75, %d7 + %d77 = add i32 %d76, %d8 + %d78 = add i32 %d77, %d5 + %d79 = add i32 %d78, %d10 + %d80 = add i32 %d79, %d11 + %d81 = add i32 %d80, %d12 + %d82 = mul i32 %d81, %d13 + %d83 = add i32 %d82, %d14 + %d84 = add i32 %d83, %d15 + %d85 = mul i32 %d84, %d16 + %d86 = add i32 %d85, %d17 + %d87 = add i32 %d86, %d18 + %d88 = add i32 %d87, 8 + %d89 = add i32 %d88, %d3 + %d90 = add i32 %d89, 12 + %d91 = add i32 %d90, %d4 + %d92 = add i32 %d91, %d3 + %d93 = add i32 %d92, %d7 + %d94 = add i32 %d93, %d8 + %d95 = add i32 %d94, %d5 + %d96 = add i32 %d95, %d10 + %d97 = add i32 %d96, %d11 + %d98 = add i32 %d97, %d12 + %d99 = mul i32 %d98, %d13 + %d100 = add i32 %d99, %d14 + %d101 = add i32 %d100, %d15 + %d102 = mul i32 %d101, %d16 + %d103 = add i32 %d102, %d17 + %d104 = add i32 %d103, %d18 + %d105 = add i32 %d104, 8 + %d106 = add i32 %d105, %d3 + %d107 = add i32 %d106, 12 + %d108 = add i32 %d107, %d4 + %d109 = add i32 %d108, %d3 + %d110 = add i32 %d109, %d7 + %d111 = add i32 %d110, %d8 + %d112 = add i32 %d111, %d5 + %d113 = add i32 %d112, %d10 + %d114 = add i32 %d113, %d11 + %d115 = add i32 %d114, %d12 + %d116 = mul i32 %d115, %d13 + %d117 = add i32 %d116, %d14 + %d118 = add i32 %d117, %d15 + %d119 = mul i32 %d118, %d16 + %d120 = add i32 %d119, %d17 + %d121 = add i32 %d120, %d18 + %d122 = add i32 %d121, 8 + %d123 = add i32 %d122, %d3 + %d124 = add i32 %d123, 12 + %d125 = add i32 %d124, %d4 + %d126 = add i32 %d125, %d3 + %d127 = add i32 %d126, %d7 + %d128 = add i32 %d127, %d8 + %d129 = add i32 %d128, %d5 + %d130 = add i32 %d129, %d10 + %d131 = add i32 %d130, %d11 + %d132 = add i32 %d131, %d12 + %d133 = mul i32 %d132, %d13 + %d134 = add i32 %d133, %d14 + %d135 = add i32 %d134, %d15 + %d136 = mul i32 %d135, %d16 + %d137 = add i32 %d136, %d17 + %d138 = add i32 %d137, %d18 + br label %h4 + +h4: + %c2 = phi i32 [%b1, %h1], [%d138, %h3] + %c3 = add i32 %c2, 8 + %c4 = add i32 %c3, %c3 + %c5 = add i32 %c4, 12 + %c6 = add i32 %c5, %c4 + %c7 = add i32 %c6, %c3 + %c8 = add i32 %c6, %c7 + %c9 = add i32 %c8, %c8 + %c10 = add i32 %c9, %c5 + %c11 = add i32 %c6, %c10 + %c12 = add i32 %c3, %c11 + %c13 = add i32 %c9, %c12 + %c14 = mul i32 %c7, %c13 + %c15 = add i32 %c2, %c14 + %c16 = add i32 %c5, %c15 + %c17 = mul i32 %c6, %c16 + %c18 = add i32 %c8, %c17 + %c19 = add i32 %c10, %c18 + %c20 = add i32 %c19, 8 + %c21 = add i32 %c20, %c3 + %c22 = add i32 %c21, 12 + %c23 = add i32 %c22, %c4 + %c24 = add i32 %c23, %c3 + %c25 = add i32 %c24, %c7 + %c26 = add i32 %c25, %c8 + %c27 = add i32 %c26, %c5 + %c28 = add i32 %c27, %c10 + %c29 = add i32 %c28, %c11 + %c30 = add i32 %c29, %c12 + %c31 = mul i32 %c30, %c13 + %c32 = add i32 %c31, %c14 + %c33 = add i32 %c32, %c15 + %c34 = mul i32 %c33, %c16 + %c35 = add i32 %c34, %c17 + %c36 = add i32 %c35, %c18 + %c37 = add i32 %c36, 8 + %c38 = add i32 %c37, %c3 + %c39 = add i32 %c38, 12 + %c40 = add i32 %c39, %c4 + %c41 = add i32 %c40, %c3 + %c42 = add i32 %c41, %c7 + %c43 = add i32 %c42, %c8 + %c44 = add i32 %c43, %c5 + %c45 = add i32 %c44, %c10 + %c46 = add i32 %c45, %c11 + %c47 = add i32 %c46, %c12 + %c48 = mul i32 %c47, %c13 + %c49 = add i32 %c48, %c14 + %c50 = add i32 %c49, %c15 + %c51 = mul i32 %c50, %c16 + %c52 = add i32 %c51, %c17 + %c53 = add i32 %c52, %c18 + %c54 = add i32 %c53, 8 + %c55 = add i32 %c54, %c3 + %c56 = add i32 %c55, 12 + %c57 = add i32 %c56, %c4 + %c58 = add i32 %c57, %c3 + %c59 = add i32 %c58, %c7 + %c60 = add i32 %c59, %c8 + %c61 = add i32 %c60, %c5 + %c62 = add i32 %c61, %c10 + %c63 = add i32 %c62, %c11 + %c64 = add i32 %c63, %c12 + %c65 = mul i32 %c64, %c13 + %c66 = add i32 %c65, %c14 + %c67 = add i32 %c66, %c15 + %c68 = mul i32 %c67, %c16 + %c69 = add i32 %c68, %c17 + %c70 = add i32 %c69, %c18 + %c71 = add i32 %c70, 8 + %c72 = add i32 %c71, %c3 + %c73 = add i32 %c72, 12 + %c74 = add i32 %c73, %c4 + %c75 = add i32 %c74, %c3 + %c76 = add i32 %c75, %c7 + %c77 = add i32 %c76, %c8 + %c78 = add i32 %c77, %c5 + %c79 = add i32 %c78, %c10 + %c80 = add i32 %c79, %c11 + %c81 = add i32 %c80, %c12 + %c82 = mul i32 %c81, %c13 + %c83 = add i32 %c82, %c14 + %c84 = add i32 %c83, %c15 + %c85 = mul i32 %c84, %c16 + %c86 = add i32 %c85, %c17 + %c87 = add i32 %c86, %c18 + %c88 = add i32 %c87, 8 + %c89 = add i32 %c88, %c3 + %c90 = add i32 %c89, 12 + %c91 = add i32 %c90, %c4 + %c92 = add i32 %c91, %c3 + %c93 = add i32 %c92, %c7 + %c94 = add i32 %c93, %c8 + %c95 = add i32 %c94, %c5 + %c96 = add i32 %c95, %c10 + %c97 = add i32 %c96, %c11 + %c98 = add i32 %c97, %c12 + %c99 = mul i32 %c98, %c13 + %c100 = add i32 %c99, %c14 + %c101 = add i32 %c100, %c15 + %c102 = mul i32 %c101, %c16 + %c103 = add i32 %c102, %c17 + %c104 = add i32 %c103, %c18 + %c105 = add i32 %c104, 8 + %c106 = add i32 %c105, %c3 + %c107 = add i32 %c106, 12 + %c108 = add i32 %c107, %c4 + %c109 = add i32 %c108, %c3 + %c110 = add i32 %c109, %c7 + %c111 = add i32 %c110, %c8 + %c112 = add i32 %c111, %c5 + %c113 = add i32 %c112, %c10 + %c114 = add i32 %c113, %c11 + %c115 = add i32 %c114, %c12 + %c116 = mul i32 %c115, %c13 + %c117 = add i32 %c116, %c14 + %c118 = add i32 %c117, %c15 + %c119 = mul i32 %c118, %c16 + %c120 = add i32 %c119, %c17 + %c121 = add i32 %c120, %c18 + %c122 = add i32 %c121, 8 + %c123 = add i32 %c122, %c3 + %c124 = add i32 %c123, 12 + %c125 = add i32 %c124, %c4 + %c126 = add i32 %c125, %c3 + %c127 = add i32 %c126, %c7 + %c128 = add i32 %c127, %c8 + %c129 = add i32 %c128, %c5 + %c130 = add i32 %c129, %c10 + %c131 = add i32 %c130, %c11 + %c132 = add i32 %c131, %c12 + %c133 = mul i32 %c132, %c13 + %c134 = add i32 %c133, %c14 + %c135 = add i32 %c134, %c15 + %c136 = mul i32 %c135, %c16 + %c137 = add i32 %c136, %c17 + %c138 = add i32 %c137, %c18 + br label %h5 + +h5: + %a2 = phi i32 [%b1, %h1], [%c138, %h4] + %a3 = add i32 %a2, 8 + %a4 = add i32 %a3, %a3 + %a5 = add i32 %a4, 12 + %a6 = add i32 %a5, %a4 + %a7 = add i32 %a6, %a3 + %a8 = add i32 %a6, %a7 + %a9 = add i32 %a8, %a8 + %a10 = add i32 %a9, %a5 + %a11 = add i32 %a6, %a10 + %a12 = add i32 %a3, %a11 + %a13 = add i32 %a9, %a12 + %a14 = mul i32 %a7, %a13 + %a15 = add i32 %a2, %a14 + %a16 = add i32 %a5, %a15 + %a17 = mul i32 %a6, %a16 + %a18 = add i32 %a8, %a17 + %a19 = add i32 %a10, %a18 + %a20 = add i32 %a19, 8 + %a21 = add i32 %a20, %a3 + %a22 = add i32 %a21, 12 + %a23 = add i32 %a22, %a4 + %a24 = add i32 %a23, %a3 + %a25 = add i32 %a24, %a7 + %a26 = add i32 %a25, %a8 + %a27 = add i32 %a26, %a5 + %a28 = add i32 %a27, %a10 + %a29 = add i32 %a28, %a11 + %a30 = add i32 %a29, %a12 + %a31 = mul i32 %a30, %a13 + %a32 = add i32 %a31, %a14 + %a33 = add i32 %a32, %a15 + %a34 = mul i32 %a33, %a16 + %a35 = add i32 %a34, %a17 + %a36 = add i32 %a35, %a18 + %a37 = add i32 %a36, 8 + %a38 = add i32 %a37, %a3 + %a39 = add i32 %a38, 12 + %a40 = add i32 %a39, %a4 + %a41 = add i32 %a40, %a3 + %a42 = add i32 %a41, %a7 + %a43 = add i32 %a42, %a8 + %a44 = add i32 %a43, %a5 + %a45 = add i32 %a44, %a10 + %a46 = add i32 %a45, %a11 + %a47 = add i32 %a46, %a12 + %a48 = mul i32 %a47, %a13 + %a49 = add i32 %a48, %a14 + %a50 = add i32 %a49, %a15 + %a51 = mul i32 %a50, %a16 + %a52 = add i32 %a51, %a17 + %a53 = add i32 %a52, %a18 + %a54 = add i32 %a53, 8 + %a55 = add i32 %a54, %a3 + %a56 = add i32 %a55, 12 + %a57 = add i32 %a56, %a4 + %a58 = add i32 %a57, %a3 + %a59 = add i32 %a58, %a7 + %a60 = add i32 %a59, %a8 + %a61 = add i32 %a60, %a5 + %a62 = add i32 %a61, %a10 + %a63 = add i32 %a62, %a11 + %a64 = add i32 %a63, %a12 + %a65 = mul i32 %a64, %a13 + %a66 = add i32 %a65, %a14 + %a67 = add i32 %a66, %a15 + %a68 = mul i32 %a67, %a16 + %a69 = add i32 %a68, %a17 + %a70 = add i32 %a69, %a18 + %a71 = add i32 %a70, 8 + %a72 = add i32 %a71, %a3 + %a73 = add i32 %a72, 12 + %a74 = add i32 %a73, %a4 + %a75 = add i32 %a74, %a3 + %a76 = add i32 %a75, %a7 + %a77 = add i32 %a76, %a8 + %a78 = add i32 %a77, %a5 + %a79 = add i32 %a78, %a10 + %a80 = add i32 %a79, %a11 + %a81 = add i32 %a80, %a12 + %a82 = mul i32 %a81, %a13 + %a83 = add i32 %a82, %a14 + %a84 = add i32 %a83, %a15 + %a85 = mul i32 %a84, %a16 + %a86 = add i32 %a85, %a17 + %a87 = add i32 %a86, %a18 + %a88 = add i32 %a87, 8 + %a89 = add i32 %a88, %a3 + %a90 = add i32 %a89, 12 + %a91 = add i32 %a90, %a4 + %a92 = add i32 %a91, %a3 + %a93 = add i32 %a92, %a7 + %a94 = add i32 %a93, %a8 + %a95 = add i32 %a94, %a5 + %a96 = add i32 %a95, %a10 + %a97 = add i32 %a96, %a11 + %a98 = add i32 %a97, %a12 + %a99 = mul i32 %a98, %a13 + %a100 = add i32 %a99, %a14 + %a101 = add i32 %a100, %a15 + %a102 = mul i32 %a101, %a16 + %a103 = add i32 %a102, %a17 + %a104 = add i32 %a103, %a18 + %a105 = add i32 %a104, 8 + %a106 = add i32 %a105, %a3 + %a107 = add i32 %a106, 12 + %a108 = add i32 %a107, %a4 + %a109 = add i32 %a108, %a3 + %a110 = add i32 %a109, %a7 + %a111 = add i32 %a110, %a8 + %a112 = add i32 %a111, %a5 + %a113 = add i32 %a112, %a10 + %a114 = add i32 %a113, %a11 + %a115 = add i32 %a114, %a12 + %a116 = mul i32 %a115, %a13 + %a117 = add i32 %a116, %a14 + %a118 = add i32 %a117, %a15 + %a119 = mul i32 %a118, %a16 + %a120 = add i32 %a119, %a17 + %a121 = add i32 %a120, %a18 + %a122 = add i32 %a121, 8 + %a123 = add i32 %a122, %a3 + %a124 = add i32 %a123, 12 + %a125 = add i32 %a124, %a4 + %a126 = add i32 %a125, %a3 + %a127 = add i32 %a126, %a7 + %a128 = add i32 %a127, %a8 + %a129 = add i32 %a128, %a5 + %a130 = add i32 %a129, %a10 + %a131 = add i32 %a130, %a11 + %a132 = add i32 %a131, %a12 + %a133 = mul i32 %a132, %a13 + %a134 = add i32 %a133, %a14 + %a135 = add i32 %a134, %a15 + %a136 = mul i32 %a135, %a16 + %a137 = add i32 %a136, %a17 + %a138 = add i32 %a137, %a18 + br label %h6 + +h6: + %y = phi i32 [0, %h1], [%a138, %h5] + %z = add i32 %y, 5 + ret i32 %z + +} +