brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.0 KiB · 4863b57 Raw
107 lines · plain
1; Test for generation of jump table for ropi/rwpi2 3; RUN: llc -relocation-model=static    -mtriple=armv7a--none-eabi -disable-block-placement < %s | FileCheck %s --check-prefix=CHECK --check-prefix=ARM --check-prefix=ARM_ABS4; RUN: llc -relocation-model=ropi      -mtriple=armv7a--none-eabi -disable-block-placement < %s | FileCheck %s --check-prefix=CHECK --check-prefix=ARM --check-prefix=ARM_PC5; 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_PC6 7; RUN: llc -relocation-model=static    -mtriple=thumbv7m--none-eabi -disable-block-placement < %s | FileCheck %s --check-prefix=CHECK --check-prefix=THUMB28; RUN: llc -relocation-model=ropi      -mtriple=thumbv7m--none-eabi -disable-block-placement < %s | FileCheck %s --check-prefix=CHECK --check-prefix=THUMB29; RUN: llc -relocation-model=ropi-rwpi -mtriple=thumbv7m--none-eabi -disable-block-placement < %s | FileCheck %s --check-prefix=CHECK --check-prefix=THUMB210 11; RUN: llc -relocation-model=static    -mtriple=thumbv6m--none-eabi -disable-block-placement < %s | FileCheck %s --check-prefix=CHECK --check-prefix=THUMB112; RUN: llc -relocation-model=ropi      -mtriple=thumbv6m--none-eabi -disable-block-placement < %s | FileCheck %s --check-prefix=CHECK --check-prefix=THUMB113; RUN: llc -relocation-model=ropi-rwpi -mtriple=thumbv6m--none-eabi -disable-block-placement < %s | FileCheck %s --check-prefix=CHECK --check-prefix=THUMB114 15 16declare void @exit0()17declare void @exit1()18declare void @exit2()19declare void @exit3()20declare void @exit4()21define void @jump_table(i32 %val) {22entry:23  switch i32 %val, label %default [ i32 1, label %lab124                                    i32 2, label %lab225                                    i32 3, label %lab326                                    i32 4, label %lab4 ]27 28default:29  tail call void @exit0()30  ret void31 32lab1:33  tail call void @exit1()34  ret void35 36lab2:37  tail call void @exit2()38  ret void39 40lab3:41  tail call void @exit3()42  ret void43 44lab4:45  tail call void @exit4()46  ret void47 48; CHECK-LABEL: jump_table:49 50; ARM: adr     r[[R_TAB_BASE:[0-9]+]], [[LJTI:\.LJTI[0-9]+_[0-9]+]]51; ARM_ABS: ldr     pc, [r[[R_TAB_BASE]], r{{[0-9]+}}, lsl #2]52; ARM_PC:  ldr     r[[R_OFFSET:[0-9]+]], [r[[R_TAB_BASE]], r{{[0-9]+}}, lsl #2]53; ARM_PC:  add     pc, r[[R_TAB_BASE]], r[[R_OFFSET]]54; ARM: [[LJTI]]55; ARM_ABS: .long [[LBB1:\.LBB[0-9]+_[0-9]+]]56; ARM_ABS: .long [[LBB2:\.LBB[0-9]+_[0-9]+]]57; ARM_ABS: .long [[LBB3:\.LBB[0-9]+_[0-9]+]]58; ARM_ABS: .long [[LBB4:\.LBB[0-9]+_[0-9]+]]59; ARM_PC:  .long [[LBB1:\.LBB[0-9]+_[0-9]+]]-[[LJTI]]60; ARM_PC:  .long [[LBB2:\.LBB[0-9]+_[0-9]+]]-[[LJTI]]61; ARM_PC:  .long [[LBB3:\.LBB[0-9]+_[0-9]+]]-[[LJTI]]62; ARM_PC:  .long [[LBB4:\.LBB[0-9]+_[0-9]+]]-[[LJTI]]63; ARM: [[LBB1]]64; ARM-NEXT: b exit165; ARM: [[LBB2]]66; ARM-NEXT: b exit267; ARM: [[LBB3]]68; ARM-NEXT: b exit369; ARM: [[LBB4]]70; ARM-NEXT: b exit471 72; THUMB2: [[LCPI:\.LCPI[0-9]+_[0-9]+]]:73; THUMB2: tbb     [pc, r{{[0-9]+}}]74; THUMB2: .byte   ([[LBB1:\.LBB[0-9]+_[0-9]+]]-([[LCPI]]+4))/275; THUMB2: .byte   ([[LBB2:\.LBB[0-9]+_[0-9]+]]-([[LCPI]]+4))/276; THUMB2: .byte   ([[LBB3:\.LBB[0-9]+_[0-9]+]]-([[LCPI]]+4))/277; THUMB2: .byte   ([[LBB4:\.LBB[0-9]+_[0-9]+]]-([[LCPI]]+4))/278; THUMB2: [[LBB1]]79; THUMB2-NEXT: b exit180; THUMB2: [[LBB2]]81; THUMB2-NEXT: b exit282; THUMB2: [[LBB3]]83; THUMB2-NEXT: b exit384; THUMB2: [[LBB4]]85; THUMB2-NEXT: b exit486 87; THUMB1: .p2align 288; THUMB1: add     r[[x:[0-9]+]], pc89; THUMB1: ldrb    r[[x]], [r[[x]], #4]90; THUMB1: lsls    r[[x]], r[[x]], #191; THUMB1: [[LCPI:\.LCPI[0-9]+_[0-9]+]]:92; THUMB1: add     pc, r[[x]]93; THUMB1: .p2align 294; THUMB1: .byte   ([[LBB1:\.LBB[0-9]+_[0-9]+]]-([[LCPI]]+4))/295; THUMB1: .byte   ([[LBB2:\.LBB[0-9]+_[0-9]+]]-([[LCPI]]+4))/296; THUMB1: .byte   ([[LBB3:\.LBB[0-9]+_[0-9]+]]-([[LCPI]]+4))/297; THUMB1: .byte   ([[LBB4:\.LBB[0-9]+_[0-9]+]]-([[LCPI]]+4))/298; THUMB1: [[LBB1]]99; THUMB1-NEXT: bl exit1100; THUMB1: [[LBB2]]101; THUMB1-NEXT: bl exit2102; THUMB1: [[LBB3]]103; THUMB1-NEXT: bl exit3104; THUMB1: [[LBB4]]105; THUMB1-NEXT: bl exit4106}107