[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / Transforms / LowerTypeTests / icall-branch-funnel.ll
blob6cd81f275babf8966a11735b063449e90c067da9
1 ; RUN: opt -S -lowertypetests < %s | FileCheck %s
3 target datalayout = "e-p:64:64"
4 target triple = "x86_64-unknown-linux"
6 ; CHECK: @0 = private constant { i32, [0 x i8], i32 } { i32 1, [0 x i8] zeroinitializer, i32 2 }
7 ; CHECK: @f1 = alias void (), void ()* @.cfi.jumptable
8 ; CHECK: @f2 = alias void (), bitcast ([8 x i8]* getelementptr inbounds ([2 x [8 x i8]], [2 x [8 x i8]]* bitcast (void ()* @.cfi.jumptable to [2 x [8 x i8]]*), i64 0, i64 1) to void ()*)
9 ; CHECK: @g1 = alias i32, getelementptr inbounds ({ i32, [0 x i8], i32 }, { i32, [0 x i8], i32 }* @0, i32 0, i32 0)
10 ; CHECK: @g2 = alias i32, getelementptr inbounds ({ i32, [0 x i8], i32 }, { i32, [0 x i8], i32 }* @0, i32 0, i32 2)
12 @g1 = constant i32 1
13 @g2 = constant i32 2
15 define void @f1() {
16   ret void
19 define void @f2() {
20   ret void
23 declare void @g1f()
24 declare void @g2f()
26 define void @jt2(i8* nest, ...) {
27   musttail call void (...) @llvm.icall.branch.funnel(
28       i8* %0,
29       i32* @g1, void ()* @g1f,
30       i32* @g2, void ()* @g2f,
31       ...
32   )
33   ret void
36 define void @jt3(i8* nest, ...) {
37   musttail call void (...) @llvm.icall.branch.funnel(
38       i8* %0,
39       void ()* @f1, void ()* @f1,
40       void ()* @f2, void ()* @f2,
41       ...
42   )
43   ret void
46 declare void @llvm.icall.branch.funnel(...)