Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / Transforms / FunctionSpecialization / bug52821-use-after-free.ll
blob3892273aac8a051bdade7e972d3620cb601f9e27
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -passes="ipsccp<func-spec>" -S < %s | FileCheck %s
4 %mystruct = type { i32, [2 x i64] }
6 define internal ptr @myfunc(ptr %arg) {
7 ; CHECK-LABEL: @myfunc(
8 ; CHECK-NEXT:  entry:
9 ; CHECK-NEXT:    br label [[FOR_COND:%.*]]
10 ; CHECK:       for.cond:
11 ; CHECK-NEXT:    br label [[FOR_COND2:%.*]]
12 ; CHECK:       for.cond2:
13 ; CHECK-NEXT:    br label [[FOR_BODY2:%.*]]
14 ; CHECK:       for.body2:
15 ; CHECK-NEXT:    br label [[FOR_COND2]]
17 entry:
18   br label %for.cond
20 for.cond:                                     ; preds = %for.body, %entry
21   %phi = phi ptr [ undef, %for.body ], [ null, %entry ]
22   %cond = icmp eq ptr %phi, null
23   br i1 %cond, label %for.cond2, label %for.body
25 for.body:                                     ; preds = %for.cond
26   call void @callee(ptr nonnull %phi)
27   br label %for.cond
29 for.cond2:                                     ; preds = %for.body2, %for.cond
30   %phi2 = phi ptr [ undef, %for.body2 ], [ null, %for.cond ]
31   br i1 false, label %for.end, label %for.body2
33 for.body2:                                     ; preds = %for.cond2
34   %arrayidx = getelementptr inbounds %mystruct, ptr %phi2, i64 0, i32 1, i64 3
35   br label %for.cond2
37 for.end:                                      ; preds = %for.cond2
38   ret ptr %arg
41 define ptr @caller() {
42 ; CHECK-LABEL: @caller(
43 ; CHECK-NEXT:  entry:
44 ; CHECK-NEXT:    [[CALL:%.*]] = call ptr @myfunc(ptr undef)
45 ; CHECK-NEXT:    ret ptr undef
47 entry:
48   %call = call ptr @myfunc(ptr undef)
49   ret ptr %call
52 declare void @callee(ptr)