18331aaeeSOliver Stannard; Test for generation of jump table for ropi/rwpi 28331aaeeSOliver Stannard 38331aaeeSOliver Stannard; RUN: llc -relocation-model=static -mtriple=armv7a--none-eabi -disable-block-placement < %s | FileCheck %s --check-prefix=CHECK --check-prefix=ARM --check-prefix=ARM_ABS 48331aaeeSOliver Stannard; RUN: llc -relocation-model=ropi -mtriple=armv7a--none-eabi -disable-block-placement < %s | FileCheck %s --check-prefix=CHECK --check-prefix=ARM --check-prefix=ARM_PC 58331aaeeSOliver Stannard; RUN: llc -relocation-model=ropi-rwpi -mtriple=armv7a--none-eabi -disable-block-placement < %s | FileCheck %s --check-prefix=CHECK --check-prefix=ARM --check-prefix=ARM_PC 68331aaeeSOliver Stannard 78331aaeeSOliver Stannard; RUN: llc -relocation-model=static -mtriple=thumbv7m--none-eabi -disable-block-placement < %s | FileCheck %s --check-prefix=CHECK --check-prefix=THUMB2 88331aaeeSOliver Stannard; RUN: llc -relocation-model=ropi -mtriple=thumbv7m--none-eabi -disable-block-placement < %s | FileCheck %s --check-prefix=CHECK --check-prefix=THUMB2 98331aaeeSOliver Stannard; RUN: llc -relocation-model=ropi-rwpi -mtriple=thumbv7m--none-eabi -disable-block-placement < %s | FileCheck %s --check-prefix=CHECK --check-prefix=THUMB2 108331aaeeSOliver Stannard 1170a3d6dfSJames Molloy; RUN: llc -relocation-model=static -mtriple=thumbv6m--none-eabi -disable-block-placement < %s | FileCheck %s --check-prefix=CHECK --check-prefix=THUMB1 1270a3d6dfSJames Molloy; RUN: llc -relocation-model=ropi -mtriple=thumbv6m--none-eabi -disable-block-placement < %s | FileCheck %s --check-prefix=CHECK --check-prefix=THUMB1 1370a3d6dfSJames Molloy; RUN: llc -relocation-model=ropi-rwpi -mtriple=thumbv6m--none-eabi -disable-block-placement < %s | FileCheck %s --check-prefix=CHECK --check-prefix=THUMB1 148331aaeeSOliver Stannard 158331aaeeSOliver Stannard 168331aaeeSOliver Stannarddeclare void @exit0() 178331aaeeSOliver Stannarddeclare void @exit1() 188331aaeeSOliver Stannarddeclare void @exit2() 198331aaeeSOliver Stannarddeclare void @exit3() 208331aaeeSOliver Stannarddeclare void @exit4() 218331aaeeSOliver Stannarddefine void @jump_table(i32 %val) { 228331aaeeSOliver Stannardentry: 238331aaeeSOliver Stannard switch i32 %val, label %default [ i32 1, label %lab1 248331aaeeSOliver Stannard i32 2, label %lab2 258331aaeeSOliver Stannard i32 3, label %lab3 268331aaeeSOliver Stannard i32 4, label %lab4 ] 278331aaeeSOliver Stannard 288331aaeeSOliver Stannarddefault: 298331aaeeSOliver Stannard tail call void @exit0() 308331aaeeSOliver Stannard ret void 318331aaeeSOliver Stannard 328331aaeeSOliver Stannardlab1: 338331aaeeSOliver Stannard tail call void @exit1() 348331aaeeSOliver Stannard ret void 358331aaeeSOliver Stannard 368331aaeeSOliver Stannardlab2: 378331aaeeSOliver Stannard tail call void @exit2() 388331aaeeSOliver Stannard ret void 398331aaeeSOliver Stannard 408331aaeeSOliver Stannardlab3: 418331aaeeSOliver Stannard tail call void @exit3() 428331aaeeSOliver Stannard ret void 438331aaeeSOliver Stannard 448331aaeeSOliver Stannardlab4: 458331aaeeSOliver Stannard tail call void @exit4() 468331aaeeSOliver Stannard ret void 478331aaeeSOliver Stannard 488331aaeeSOliver Stannard; CHECK-LABEL: jump_table: 498331aaeeSOliver Stannard 508331aaeeSOliver Stannard; ARM: adr r[[R_TAB_BASE:[0-9]+]], [[LJTI:\.LJTI[0-9]+_[0-9]+]] 51*842aa901SMomchil Velikov; ARM_ABS: ldr pc, [r[[R_TAB_BASE]], r{{[0-9]+}}, lsl #2] 52*842aa901SMomchil Velikov; ARM_PC: ldr r[[R_OFFSET:[0-9]+]], [r[[R_TAB_BASE]], r{{[0-9]+}}, lsl #2] 53*842aa901SMomchil Velikov; ARM_PC: add pc, r[[R_TAB_BASE]], r[[R_OFFSET]] 548331aaeeSOliver Stannard; ARM: [[LJTI]] 558331aaeeSOliver Stannard; ARM_ABS: .long [[LBB1:\.LBB[0-9]+_[0-9]+]] 568331aaeeSOliver Stannard; ARM_ABS: .long [[LBB2:\.LBB[0-9]+_[0-9]+]] 578331aaeeSOliver Stannard; ARM_ABS: .long [[LBB3:\.LBB[0-9]+_[0-9]+]] 588331aaeeSOliver Stannard; ARM_ABS: .long [[LBB4:\.LBB[0-9]+_[0-9]+]] 598331aaeeSOliver Stannard; ARM_PC: .long [[LBB1:\.LBB[0-9]+_[0-9]+]]-[[LJTI]] 608331aaeeSOliver Stannard; ARM_PC: .long [[LBB2:\.LBB[0-9]+_[0-9]+]]-[[LJTI]] 618331aaeeSOliver Stannard; ARM_PC: .long [[LBB3:\.LBB[0-9]+_[0-9]+]]-[[LJTI]] 628331aaeeSOliver Stannard; ARM_PC: .long [[LBB4:\.LBB[0-9]+_[0-9]+]]-[[LJTI]] 638331aaeeSOliver Stannard; ARM: [[LBB1]] 648331aaeeSOliver Stannard; ARM-NEXT: b exit1 658331aaeeSOliver Stannard; ARM: [[LBB2]] 668331aaeeSOliver Stannard; ARM-NEXT: b exit2 678331aaeeSOliver Stannard; ARM: [[LBB3]] 688331aaeeSOliver Stannard; ARM-NEXT: b exit3 698331aaeeSOliver Stannard; ARM: [[LBB4]] 708331aaeeSOliver Stannard; ARM-NEXT: b exit4 718331aaeeSOliver Stannard 728331aaeeSOliver Stannard; THUMB2: [[LCPI:\.LCPI[0-9]+_[0-9]+]]: 738331aaeeSOliver Stannard; THUMB2: tbb [pc, r{{[0-9]+}}] 748331aaeeSOliver Stannard; THUMB2: .byte ([[LBB1:\.LBB[0-9]+_[0-9]+]]-([[LCPI]]+4))/2 758331aaeeSOliver Stannard; THUMB2: .byte ([[LBB2:\.LBB[0-9]+_[0-9]+]]-([[LCPI]]+4))/2 768331aaeeSOliver Stannard; THUMB2: .byte ([[LBB3:\.LBB[0-9]+_[0-9]+]]-([[LCPI]]+4))/2 778331aaeeSOliver Stannard; THUMB2: .byte ([[LBB4:\.LBB[0-9]+_[0-9]+]]-([[LCPI]]+4))/2 788331aaeeSOliver Stannard; THUMB2: [[LBB1]] 798331aaeeSOliver Stannard; THUMB2-NEXT: b exit1 808331aaeeSOliver Stannard; THUMB2: [[LBB2]] 818331aaeeSOliver Stannard; THUMB2-NEXT: b exit2 828331aaeeSOliver Stannard; THUMB2: [[LBB3]] 838331aaeeSOliver Stannard; THUMB2-NEXT: b exit3 848331aaeeSOliver Stannard; THUMB2: [[LBB4]] 858331aaeeSOliver Stannard; THUMB2-NEXT: b exit4 868331aaeeSOliver Stannard 87b03e0879SJames Molloy; THUMB1: .p2align 2 8870a3d6dfSJames Molloy; THUMB1: add r[[x:[0-9]+]], pc 8970a3d6dfSJames Molloy; THUMB1: ldrb r[[x]], [r[[x]], #4] 9070a3d6dfSJames Molloy; THUMB1: lsls r[[x]], r[[x]], #1 9170a3d6dfSJames Molloy; THUMB1: [[LCPI:\.LCPI[0-9]+_[0-9]+]]: 9270a3d6dfSJames Molloy; THUMB1: add pc, r[[x]] 9370a3d6dfSJames Molloy; THUMB1: .p2align 2 9470a3d6dfSJames Molloy; THUMB1: .byte ([[LBB1:\.LBB[0-9]+_[0-9]+]]-([[LCPI]]+4))/2 9570a3d6dfSJames Molloy; THUMB1: .byte ([[LBB2:\.LBB[0-9]+_[0-9]+]]-([[LCPI]]+4))/2 9670a3d6dfSJames Molloy; THUMB1: .byte ([[LBB3:\.LBB[0-9]+_[0-9]+]]-([[LCPI]]+4))/2 9770a3d6dfSJames Molloy; THUMB1: .byte ([[LBB4:\.LBB[0-9]+_[0-9]+]]-([[LCPI]]+4))/2 988331aaeeSOliver Stannard; THUMB1: [[LBB1]] 998331aaeeSOliver Stannard; THUMB1-NEXT: bl exit1 1008331aaeeSOliver Stannard; THUMB1: [[LBB2]] 1018331aaeeSOliver Stannard; THUMB1-NEXT: bl exit2 1028331aaeeSOliver Stannard; THUMB1: [[LBB3]] 1038331aaeeSOliver Stannard; THUMB1-NEXT: bl exit3 1048331aaeeSOliver Stannard; THUMB1: [[LBB4]] 1058331aaeeSOliver Stannard; THUMB1-NEXT: bl exit4 1068331aaeeSOliver Stannard} 107