[LLVM][IR] Use splat syntax when printing ConstantExpr based splats. (#116856)
[llvm-project.git] / llvm / test / Transforms / ArgumentPromotion / crash.ll
blob12caae4dbef8df470d60c0247bf3642b46082ec2
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
2 ; RUN: opt -S < %s -passes=inline,argpromotion | FileCheck %s --check-prefix=ARGPROMOTION
4 %S = type { ptr }
6 ; Inlining should nuke the invoke (and any inlined calls) here even with
7 ; argument promotion running along with it.
8 define void @zot() personality ptr @wibble {
9 ; ARGPROMOTION-LABEL: define {{[^@]+}}@zot() personality ptr @wibble {
10 ; ARGPROMOTION-NEXT:  bb:
11 ; ARGPROMOTION-NEXT:    unreachable
12 ; ARGPROMOTION:       hoge.exit:
13 ; ARGPROMOTION-NEXT:    br label [[BB1:%.*]]
14 ; ARGPROMOTION:       bb1:
15 ; ARGPROMOTION-NEXT:    unreachable
16 ; ARGPROMOTION:       bb2:
17 ; ARGPROMOTION-NEXT:    [[TEMP:%.*]] = landingpad { ptr, i32 }
18 ; ARGPROMOTION-NEXT:    cleanup
19 ; ARGPROMOTION-NEXT:    unreachable
21 bb:
22   invoke void @hoge()
23   to label %bb1 unwind label %bb2
25 bb1:
26   unreachable
28 bb2:
29   %temp = landingpad { ptr, i32 }
30   cleanup
31   unreachable
34 define internal void @hoge() {
35 bb:
36   %temp = call fastcc ptr @spam(ptr @eggs)
37   %temp1 = call fastcc ptr @spam(ptr @barney)
38   unreachable
41 define internal fastcc ptr @spam(ptr %arg) {
42 bb:
43   unreachable
46 define internal i1 @eggs(ptr %arg) {
47 ; ARGPROMOTION-LABEL: define {{[^@]+}}@eggs() {
48 ; ARGPROMOTION-NEXT:  bb:
49 ; ARGPROMOTION-NEXT:    unreachable
51 bb:
52   %temp = call zeroext i1 @barney(ptr %arg)
53   unreachable
56 define internal i1 @barney(ptr %arg) {
57 bb:
58   ret i1 undef
61 define i32 @test_inf_promote_caller(i32 %arg) {
62 ; ARGPROMOTION-LABEL: define {{[^@]+}}@test_inf_promote_caller
63 ; ARGPROMOTION-SAME: (i32 [[ARG:%.*]]) {
64 ; ARGPROMOTION-NEXT:  bb:
65 ; ARGPROMOTION-NEXT:    [[TEMP:%.*]] = alloca [[S:%.*]], align 8
66 ; ARGPROMOTION-NEXT:    [[TEMP1:%.*]] = alloca [[S]], align 8
67 ; ARGPROMOTION-NEXT:    [[TEMP2:%.*]] = call i32 @test_inf_promote_callee(ptr [[TEMP]], ptr [[TEMP1]])
68 ; ARGPROMOTION-NEXT:    ret i32 0
70 bb:
71   %temp = alloca %S
72   %temp1 = alloca %S
73   %temp2 = call i32 @test_inf_promote_callee(ptr %temp, ptr %temp1)
75   ret i32 0
78 define internal i32 @test_inf_promote_callee(ptr %arg, ptr %arg1) {
79 ; ARGPROMOTION-LABEL: define {{[^@]+}}@test_inf_promote_callee
80 ; ARGPROMOTION-SAME: (ptr [[ARG:%.*]], ptr [[ARG1:%.*]]) {
81 ; ARGPROMOTION-NEXT:  bb:
82 ; ARGPROMOTION-NEXT:    [[TEMP2:%.*]] = load ptr, ptr [[ARG1]], align 8
83 ; ARGPROMOTION-NEXT:    [[TEMP4:%.*]] = load ptr, ptr [[ARG]], align 8
84 ; ARGPROMOTION-NEXT:    [[TEMP5:%.*]] = call i32 @test_inf_promote_callee(ptr [[TEMP4]], ptr [[TEMP2]])
85 ; ARGPROMOTION-NEXT:    ret i32 0
87 bb:
88   %temp2 = load ptr, ptr %arg1
89   %temp4 = load ptr, ptr %arg
90   %temp5 = call i32 @test_inf_promote_callee(ptr %temp4, ptr %temp2)
92   ret i32 0
95 declare i32 @wibble(...)