brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.4 KiB · c0b57e9 Raw
210 lines · plain
1; RUN: llc %s -o - -mtriple x86_64-sie-ps5 -emit-jump-table-sizes-section -verify-machineinstrs --relocation-model=pic | FileCheck --check-prefix=PS5-CHECK %s2; RUN: llc %s -o - -mtriple x86_64-sie-ps5 -verify-machineinstrs --relocation-model=pic | FileCheck --check-prefix=NOFLAG %s3; RUN: llc %s -o - -mtriple x86_64-sie-ps5 -verify-machineinstrs --relocation-model=pic | FileCheck --check-prefix=NOTABLE %s4 5; RUN: llc %s -o - -mtriple x86_64-unknown-linux-gnu -emit-jump-table-sizes-section -verify-machineinstrs --relocation-model=pic | FileCheck --check-prefix=ELF-CHECK %s6; RUN: llc %s -o - -mtriple x86_64-unknown-linux-gnu -verify-machineinstrs --relocation-model=pic | FileCheck --check-prefix=NOFLAG %s7; RUN: llc %s -o - -mtriple x86_64-unknown-linux-gnu -verify-machineinstrs --relocation-model=pic | FileCheck --check-prefix=NOTABLE %s8 9; RUN: llc %s -o - -mtriple x86_64-pc-windows-msvc -emit-jump-table-sizes-section -verify-machineinstrs --relocation-model=pic | FileCheck --check-prefix=COFF-CHECK %s10; RUN: llc %s -o - -mtriple x86_64-pc-windows-msvc -verify-machineinstrs --relocation-model=pic | FileCheck --check-prefix=NOFLAG %s11; RUN: llc %s -o - -mtriple x86_64-pc-windows-msvc -verify-machineinstrs --relocation-model=pic | FileCheck --check-prefix=NOTABLE %s12 13; This test verifies the jump table size section. Currently only enabled by default on the PS5 target.14 15$foo1 = comdat any16 17; Ensure proper comdat handling.18define void @foo1(i32 %x, ptr %to) comdat {19 20; PS5-CHECK-LABEL: foo121; PS5-CHECK:       .section        .llvm_jump_table_sizes,"G",@llvm_jt_sizes,foo1,comdat22; PS5-CHECK-NEXT: .quad   .LJTI0_023; PS5-CHECK-NEXT: .quad   624 25; ELF-CHECK-LABEL: foo126; ELF-CHECK:       .section        .llvm_jump_table_sizes,"G",@llvm_jt_sizes,foo1,comdat27; ELF-CHECK-NEXT: .quad   .LJTI0_028; ELF-CHECK-NEXT: .quad   629 30; COFF-CHECK-LABEL: foo131; COFF-CHECK:      .section         .llvm_jump_table_sizes,"drD",associative,foo132; COFF-CHECK-NEXT: .quad   .LJTI0_033; COFF-CHECK-NEXT: .quad   634 35; NOFLAG-LABEL: foo136; NOFLAG-NOT: .section        .llvm_jump_table_sizes37 38entry:39  switch i32 %x, label %default [40    i32 0, label %bb041    i32 1, label %bb142    i32 2, label %bb243    i32 3, label %bb344    i32 4, label %bb445    i32 5, label %bb446  ]47bb0:48  store i32 0, ptr %to49  br label %exit50bb1:51  store i32 1, ptr %to52  br label %exit53bb2:54  store i32 2, ptr %to55  br label %exit56bb3:57  store i32 3, ptr %to58  br label %exit59bb4:60  store i32 4, ptr %to61  br label %exit62exit:63  ret void64default:65  unreachable66}67 68define void @foo2(i32 %x, ptr %to) {69 70; PS5-CHECK-LABEL:    foo271; PS5-CHECK:          .section .llvm_jump_table_sizes,"",@llvm_jt_sizes72; PS5-CHECK-NEXT:     .quad .LJTI1_073; PS5-CHECK-NEXT:     .quad   574 75; ELF-CHECK-LABEL:    foo276; ELF-CHECK:          .section .llvm_jump_table_sizes,"",@llvm_jt_sizes77; ELF-CHECK-NEXT:     .quad .LJTI1_078; ELF-CHECK-NEXT:     .quad   579 80; COFF-CHECK-LABEL:   foo281; COFF-CHECK:         .section         .llvm_jump_table_sizes,"drD"82; COFF-CHECK-NEXT:    .quad .LJTI1_083; COFF-CHECK-NEXT:    .quad   584 85; NOFLAG-LABEL:       foo186; NOFLAG-NOT:         .section        .llvm_jump_table_sizes87 88entry:89  switch i32 %x, label %default [90    i32 0, label %bb091    i32 1, label %bb192    i32 2, label %bb293    i32 3, label %bb394    i32 4, label %bb495  ]96bb0:97  store i32 0, ptr %to98  br label %exit99bb1:100  store i32 1, ptr %to101  br label %exit102bb2:103  store i32 2, ptr %to104  br label %exit105bb3:106  store i32 3, ptr %to107  br label %exit108bb4:109  store i32 4, ptr %to110  br label %exit111exit:112  ret void113default:114  unreachable115}116 117; Ensure that the section isn't produced if there is no jump table.118 119define void @foo3(i32 %x, ptr %to) {120 121; NOTABLE-LABEL:    foo3122; NOTABLE-NOT:      .section        .llvm_jump_table_sizes123 124exit:125  ret void126}127 128; Ensure we can deal with nested jump tables.129 130define void @nested(i32 %x, i32 %y, ptr %to) {131 132; PS5-CHECK-LABEL:    nested133; PS5-CHECK:          .section .llvm_jump_table_sizes,"",@llvm_jt_sizes134; PS5-CHECK-NEXT:     .quad .LJTI3_0135; PS5-CHECK-NEXT:     .quad   5136; PS5-CHECK-NEXT:     .quad .LJTI3_1137; PS5-CHECK-NEXT:     .quad 6138 139; ELF-CHECK-LABEL:    nested140; ELF-CHECK:          .section .llvm_jump_table_sizes,"",@llvm_jt_sizes141; ELF-CHECK-NEXT:     .quad .LJTI3_0142; ELF-CHECK-NEXT:     .quad   5143; ELF-CHECK-NEXT:     .quad .LJTI3_1144; ELF-CHECK-NEXT:     .quad 6145 146; COFF-CHECK-LABEL:   nested147; COFF-CHECK:         .section         .llvm_jump_table_sizes,"drD"148; COFF-CHECK-NEXT:     .quad .LJTI3_0149; COFF-CHECK-NEXT:     .quad   5150; COFF-CHECK-NEXT:     .quad .LJTI3_1151; COFF-CHECK-NEXT:     .quad 6152 153; NOFLAG-LABEL:       nested154; NOFLAG-NOT:         .section        .llvm_jump_table_sizes155 156entry:157  switch i32 %x, label %default [158    i32 0, label %bb0159    i32 1, label %bb1160    i32 2, label %bb2161    i32 3, label %bb3162    i32 4, label %bb4163  ]164bb0:165  store i32 0, ptr %to166  br label %exit167bb1:168  store i32 1, ptr %to169  br label %exit170bb2:171  store i32 2, ptr %to172  br label %exit173bb3:174  store i32 3, ptr %to175  br label %exit176bb4:177  switch i32 %y, label %default [178    i32 1, label %bb5179    i32 2, label %bb6180    i32 3, label %bb7181    i32 4, label %bb8182    i32 5, label %bb9183    i32 6, label %bb10184  ]185  br label %exit2186bb5:187  store i32 4, ptr %to188  br label %exit189bb6:190  store i32 4, ptr %to191  br label %exit192bb7:193  store i32 4, ptr %to194  br label %exit195bb8:196  store i32 4, ptr %to197  br label %exit198bb9:199  store i32 4, ptr %to200  br label %exit201bb10:202  store i32 4, ptr %to203  br label %exit204exit:205  ret void206exit2:207  ret void208default:209  unreachable210}