blob: e77c87f52fb0e94e9c5d5df5d3a82a5dd929b37d [file] [edit]
; RUN: opt -S -passes=simplifycfg -switch-to-lookup=true -keep-loops=false -mtriple=dxil-pc-shadermodel6.3-library %s | FileCheck %s
; The switch result values all fit in i8. DXIL does not support i8, but when
; native 16-bit types are enabled (the dx.nativelowprec module flag, set by
; -enable-16bit-types), the DirectX target transform reports a minimum lookup
; table element width of i16. So SimplifyCFG narrows the table from i32 to i16
; (but never to i8).
; CHECK: @switch.table.test = private unnamed_addr constant [4 x i16] [i16 3, i16 1, i16 2, i16 5]
; CHECK-NOT: @switch.table.test = private unnamed_addr constant [4 x i8]
define i32 @test(i32 %i) {
; CHECK-LABEL: define i32 @test(
; CHECK: getelementptr inbounds [4 x i16], ptr @switch.table.test
; CHECK: load i16, ptr
entry:
switch i32 %i, label %def [
i32 0, label %bb0
i32 1, label %bb1
i32 2, label %bb2
i32 3, label %bb3
]
bb0:
br label %ret
bb1:
br label %ret
bb2:
br label %ret
bb3:
br label %ret
def:
br label %ret
ret:
%r = phi i32 [ 3, %bb0 ], [ 1, %bb1 ], [ 2, %bb2 ], [ 5, %bb3 ], [ 0, %def ]
ret i32 %r
}
!llvm.module.flags = !{!0}
!0 = !{i32 1, !"dx.nativelowprec", i32 1}