67 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; We used to generate a mul+mflo sequence instead of shifting by 2/3 to get the jump table address3; RUN: llc %s -O2 -mtriple=mips64-unknown-freebsd -target-abi n64 -relocation-model=pic -o - | FileCheck %s4 5define i64 @test(i64 %arg) {6; CHECK-LABEL: test:7; CHECK: # %bb.0: # %entry8; CHECK-NEXT: lui $1, %hi(%neg(%gp_rel(test)))9; CHECK-NEXT: daddu $2, $1, $2510; CHECK-NEXT: sltiu $1, $4, 1111; CHECK-NEXT: beqz $1, .LBB0_412; CHECK-NEXT: nop13; CHECK-NEXT: # %bb.1: # %entry14; CHECK-NEXT: daddiu $1, $2, %lo(%neg(%gp_rel(test)))15; CHECK-NEXT: dsll $2, $4, 316; CHECK-NEXT: ld $3, %got_page(.LJTI0_0)($1)17; CHECK-NEXT: daddu $2, $2, $318; CHECK-NEXT: ld $2, %got_ofst(.LJTI0_0)($2)19; CHECK-NEXT: daddu $1, $1, $220; CHECK-NEXT: jr $121; CHECK-NEXT: nop22; CHECK-NEXT: .LBB0_2: # %sw.bb23; CHECK-NEXT: jr $ra24; CHECK-NEXT: daddiu $2, $zero, 125; CHECK-NEXT: .LBB0_3: # %sw.bb126; CHECK-NEXT: jr $ra27; CHECK-NEXT: daddiu $2, $zero, 028; CHECK-NEXT: .LBB0_4: # %default29; CHECK-NEXT: jr $ra30; CHECK-NEXT: daddiu $2, $zero, 123431; Previously this dsll was the following sequence:32; daddiu $2, $zero, 833; dmult $4, $234; mflo $235entry:36 switch i64 %arg, label %default [37 i64 0, label %sw.bb38 i64 3, label %sw.bb39 i64 5, label %sw.bb40 i64 10, label %sw.bb141 ]42 43default:44 ret i64 123445 46sw.bb:47 ret i64 148 49sw.bb1:50 ret i64 051}52 53; CHECK-LABEL: .section .rodata,"a",@progbits54; CHECK-NEXT: .p2align 355; CHECK-LABEL: .LJTI0_0:56; CHECK-NEXT: .gpdword .LBB0_257; CHECK-NEXT: .gpdword .LBB0_458; CHECK-NEXT: .gpdword .LBB0_459; CHECK-NEXT: .gpdword .LBB0_260; CHECK-NEXT: .gpdword .LBB0_461; CHECK-NEXT: .gpdword .LBB0_262; CHECK-NEXT: .gpdword .LBB0_463; CHECK-NEXT: .gpdword .LBB0_464; CHECK-NEXT: .gpdword .LBB0_465; CHECK-NEXT: .gpdword .LBB0_466; CHECK-NEXT: .gpdword .LBB0_367