brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · 2e1b01e Raw
52 lines · plain
1;; __kernel void test_switch(__global int* res, uchar val)2;; {3;;   switch(val)4;;   {5;;   case 0:6;;     *res = 1;7;;     break;8;;   case 1:9;;     *res = 2;10;;     break;11;;   case 2:12;;     *res = 3;13;;     break;14;;   }15;; }16 17; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV18 19; CHECK-SPIRV: OpSwitch %[[#]] %[[#]] 0 %[[#]] 1 %[[#]] 2 %[[#]]20 21define spir_kernel void @test_switch(i32 addrspace(1)* %res, i8 zeroext %val) {22entry:23  %res.addr = alloca i32 addrspace(1)*, align 424  %val.addr = alloca i8, align 125  store i32 addrspace(1)* %res, i32 addrspace(1)** %res.addr, align 426  store i8 %val, i8* %val.addr, align 127  %0 = load i8, i8* %val.addr, align 128  switch i8 %0, label %sw.epilog [29    i8 0, label %sw.bb30    i8 1, label %sw.bb131    i8 2, label %sw.bb232  ]33 34sw.bb:                                            ; preds = %entry35  %1 = load i32 addrspace(1)*, i32 addrspace(1)** %res.addr, align 436  store i32 1, i32 addrspace(1)* %1, align 437  br label %sw.epilog38 39sw.bb1:                                           ; preds = %entry40  %2 = load i32 addrspace(1)*, i32 addrspace(1)** %res.addr, align 441  store i32 2, i32 addrspace(1)* %2, align 442  br label %sw.epilog43 44sw.bb2:                                           ; preds = %entry45  %3 = load i32 addrspace(1)*, i32 addrspace(1)** %res.addr, align 446  store i32 3, i32 addrspace(1)* %3, align 447  br label %sw.epilog48 49sw.epilog:                                        ; preds = %entry, %sw.bb2, %sw.bb1, %sw.bb50  ret void51}52