brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.3 KiB · 717ddcd Raw
217 lines · plain
1; RUN: llc < %s --mtriple=wasm32-unknown-unknown -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -disable-block-placement -verify-machineinstrs | FileCheck %s2; RUN: llc < %s --mtriple=wasm64-unknown-unknown -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -disable-block-placement -verify-machineinstrs | FileCheck %s3 4; Test switch instructions. Block placement is disabled because it reorders5; the blocks in a way that isn't interesting here.6 7declare void @foo0()8declare void @foo1()9declare void @foo2()10declare void @foo3()11declare void @foo4()12declare void @foo5()13 14; CHECK-LABEL: bar32:15; CHECK:      block   {{$}}16; CHECK:      block   {{$}}17; CHECK:      block   {{$}}18; CHECK:      block   {{$}}19; CHECK:      block   {{$}}20; CHECK:      block   {{$}}21; CHECK:      block   {{$}}22; CHECK-NEXT: br_table {{[^,]+}}, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 4, 5, 6{{$}}23; CHECK:      .LBB{{[0-9]+}}_1:24; CHECK:        call foo0{{$}}25; CHECK:      .LBB{{[0-9]+}}_2:26; CHECK:        call foo1{{$}}27; CHECK:      .LBB{{[0-9]+}}_3:28; CHECK:        call foo2{{$}}29; CHECK:      .LBB{{[0-9]+}}_4:30; CHECK:        call foo3{{$}}31; CHECK:      .LBB{{[0-9]+}}_5:32; CHECK:        call foo4{{$}}33; CHECK:      .LBB{{[0-9]+}}_6:34; CHECK:        call foo5{{$}}35; CHECK:      .LBB{{[0-9]+}}_7:36; CHECK:        return{{$}}37define void @bar32(i32 %n) {38entry:39  switch i32 %n, label %sw.epilog [40    i32 0, label %sw.bb41    i32 1, label %sw.bb42    i32 2, label %sw.bb43    i32 3, label %sw.bb44    i32 4, label %sw.bb45    i32 5, label %sw.bb46    i32 6, label %sw.bb47    i32 7, label %sw.bb.148    i32 8, label %sw.bb.149    i32 9, label %sw.bb.150    i32 10, label %sw.bb.151    i32 11, label %sw.bb.152    i32 12, label %sw.bb.153    i32 13, label %sw.bb.154    i32 14, label %sw.bb.155    i32 15, label %sw.bb.256    i32 16, label %sw.bb.257    i32 17, label %sw.bb.258    i32 18, label %sw.bb.259    i32 19, label %sw.bb.260    i32 20, label %sw.bb.261    i32 21, label %sw.bb.362    i32 22, label %sw.bb.463    i32 23, label %sw.bb.564  ]65 66sw.bb:                                            ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry67  tail call void @foo0()68  br label %sw.epilog69 70sw.bb.1:                                          ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry71  tail call void @foo1()72  br label %sw.epilog73 74sw.bb.2:                                          ; preds = %entry, %entry, %entry, %entry, %entry, %entry75  tail call void @foo2()76  br label %sw.epilog77 78sw.bb.3:                                          ; preds = %entry79  tail call void @foo3()80  br label %sw.epilog81 82sw.bb.4:                                          ; preds = %entry83  tail call void @foo4()84  br label %sw.epilog85 86sw.bb.5:                                          ; preds = %entry87  tail call void @foo5()88  br label %sw.epilog89 90sw.epilog:                                        ; preds = %entry, %sw.bb.5, %sw.bb.4, %sw.bb.3, %sw.bb.2, %sw.bb.1, %sw.bb91  ret void92}93 94; CHECK-LABEL: bar64:95; CHECK:      block   {{$}}96; CHECK:      i64.const97; CHECK:      i64.gt_u98; CHECK:      br_if 099; CHECK:      block   {{$}}100; CHECK:      block   {{$}}101; CHECK:      block   {{$}}102; CHECK:      block   {{$}}103; CHECK:      block   {{$}}104; CHECK:      block   {{$}}105; CHECK:      i32.wrap_i64106; CHECK-NEXT: br_table {{[^,]+}}, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 4, 5, 0{{$}}107; CHECK:      .LBB{{[0-9]+}}_2:108; CHECK:        call foo0{{$}}109; CHECK:      .LBB{{[0-9]+}}_3:110; CHECK:        call foo1{{$}}111; CHECK:      .LBB{{[0-9]+}}_4:112; CHECK:        call foo2{{$}}113; CHECK:      .LBB{{[0-9]+}}_5:114; CHECK:        call foo3{{$}}115; CHECK:      .LBB{{[0-9]+}}_6:116; CHECK:        call foo4{{$}}117; CHECK:      .LBB{{[0-9]+}}_7:118; CHECK:        call foo5{{$}}119; CHECK:      .LBB{{[0-9]+}}_8:120; CHECK:        return{{$}}121define void @bar64(i64 %n) {122entry:123  switch i64 %n, label %sw.epilog [124    i64 0, label %sw.bb125    i64 1, label %sw.bb126    i64 2, label %sw.bb127    i64 3, label %sw.bb128    i64 4, label %sw.bb129    i64 5, label %sw.bb130    i64 6, label %sw.bb131    i64 7, label %sw.bb.1132    i64 8, label %sw.bb.1133    i64 9, label %sw.bb.1134    i64 10, label %sw.bb.1135    i64 11, label %sw.bb.1136    i64 12, label %sw.bb.1137    i64 13, label %sw.bb.1138    i64 14, label %sw.bb.1139    i64 15, label %sw.bb.2140    i64 16, label %sw.bb.2141    i64 17, label %sw.bb.2142    i64 18, label %sw.bb.2143    i64 19, label %sw.bb.2144    i64 20, label %sw.bb.2145    i64 21, label %sw.bb.3146    i64 22, label %sw.bb.4147    i64 23, label %sw.bb.5148  ]149 150sw.bb:                                            ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry151  tail call void @foo0()152  br label %sw.epilog153 154sw.bb.1:                                          ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry155  tail call void @foo1()156  br label %sw.epilog157 158sw.bb.2:                                          ; preds = %entry, %entry, %entry, %entry, %entry, %entry159  tail call void @foo2()160  br label %sw.epilog161 162sw.bb.3:                                          ; preds = %entry163  tail call void @foo3()164  br label %sw.epilog165 166sw.bb.4:                                          ; preds = %entry167  tail call void @foo4()168  br label %sw.epilog169 170sw.bb.5:                                          ; preds = %entry171  tail call void @foo5()172  br label %sw.epilog173 174sw.epilog:                                        ; preds = %entry, %sw.bb.5, %sw.bb.4, %sw.bb.3, %sw.bb.2, %sw.bb.1, %sw.bb175  ret void176}177 178; CHECK-LABEL: truncated:179; CHECK:        block180; CHECK:        block181; CHECK:        block182; CHECK:        i32.wrap_i64183; CHECK-NEXT:   br_table {{[^,]+}}, 0, 1, 2{{$}}184; CHECK:      .LBB{{[0-9]+}}_1185; CHECK:        end_block186; CHECK:        call foo0{{$}}187; CHECK:        return{{$}}188; CHECK:      .LBB{{[0-9]+}}_2189; CHECK:        end_block190; CHECK:        call foo1{{$}}191; CHECK:        return{{$}}192; CHECK:      .LBB{{[0-9]+}}_3193; CHECK:        end_block194; CHECK:        call foo2{{$}}195; CHECK:        return{{$}}196; CHECK:        end_function197define void @truncated(i64 %n) {198entry:199  %m = trunc i64 %n to i32200  switch i32 %m, label %default [201    i32 0, label %bb1202    i32 1, label %bb2203  ]204 205bb1:206  tail call void @foo0()207  ret void208 209bb2:210  tail call void @foo1()211  ret void212 213default:214  tail call void @foo2()215  ret void216}217