1; RUN: llc <%s -jump-table-type=single | FileCheck %s 2target triple = "x86_64-unknown-linux-gnu" 3define i32 @f() unnamed_addr jumptable { 4 ret i32 0 5} 6 7define i32 @g(i8* %a) unnamed_addr jumptable { 8 ret i32 0 9} 10 11define void @h(void ()* %func) unnamed_addr jumptable { 12 ret void 13} 14 15define i32 @main() { 16 %g = alloca i32 (...)*, align 8 17 store i32 (...)* bitcast (i32 ()* @f to i32 (...)*), i32 (...)** %g, align 8 18; CHECK: movq $__llvm_jump_instr_table_0_[[ENTRY:1|2|3]], 19; CHECK: movl $__llvm_jump_instr_table_0_[[ENTRY]], 20 %1 = load i32 (...)** %g, align 8 21 %call = call i32 (...)* %1() 22 call void (void ()*)* @h(void ()* bitcast (void (void ()*)* @h to void ()*)) 23; CHECK: movl $__llvm_jump_instr_table_0_{{1|2|3}}, 24; CHECK: callq h 25 26 %a = call i32 (i32*)* bitcast (i32 (i8*)* @g to i32(i32*)*)(i32* null) 27; CHECK: callq g 28 ret i32 %a 29} 30 31; CHECK: .align 8, 0x90 32; CHECK: .type __llvm_jump_instr_table_0_1,@function 33; CHECK: __llvm_jump_instr_table_0_1: 34; CHECK: jmp {{f|g|h}}@PLT 35; CHECK: .align 8, 0x90 36; CHECK: .type __llvm_jump_instr_table_0_2,@function 37; CHECK: __llvm_jump_instr_table_0_2: 38; CHECK: jmp {{f|g|h}}@PLT 39; CHECK: .align 8, 0x90 40; CHECK: .type __llvm_jump_instr_table_0_3,@function 41; CHECK: __llvm_jump_instr_table_0_3: 42; CHECK: jmp {{f|g|h}}@PLT 43 44