1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
; RUN: opt -passes='early-cse<memssa>' -S < %s | FileCheck %s
; Check that this doesn't crash. The crash only happens with expensive checks,
; but there doesn't seem to be a REQUIRES for that.
; CHECK: invoke void @f1
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%s.0 = type { %s.1 }
%s.1 = type { ptr }
%s.2 = type { %s.3, %s.6, %s.16 }
%s.3 = type { %s.4, %s.5 }
%s.4 = type { ptr, i64 }
%s.5 = type { ptr }
%s.6 = type <{ %s.7, %s.10, ptr, i32, [4 x i8] }>
%s.7 = type { ptr, %s.8, ptr, ptr, ptr, ptr, ptr, ptr }
%s.8 = type { ptr }
%s.9 = type opaque
%s.10 = type { %s.11 }
%s.11 = type { %s.12 }
%s.12 = type { %s.13 }
%s.13 = type { %s.14 }
%s.14 = type { %s.15 }
%s.15 = type { i64, i64, ptr }
%s.16 = type <{ %s.17, ptr, i32 }>
%s.17 = type { ptr, i32, i64, i64, i32, i32, ptr, ptr, ptr, ptr, i64, i64, ptr, i64, i64, ptr, i64, i64 }
%s.18 = type { ptr, %s.16 }
%s.19 = type { i8, %s.20 }
%s.20 = type { %s.21 }
%s.21 = type { ptr, %s.24, %s.26 }
%s.22 = type { ptr }
%s.23 = type <{ %s.22, ptr, ptr, i8, [7 x i8] }>
%s.24 = type { %s.25 }
%s.25 = type { %s.22 }
%s.26 = type { %s.27 }
%s.27 = type { i64 }
@g0 = external constant [1 x i8], align 1
declare i32 @f0(...)
; Function Attrs: uwtable
declare void @f1(ptr nocapture) align 2
declare void @f2(ptr, ptr)
declare void @f3(ptr, ptr, i32)
define ptr @f4(ptr %a0, ptr %a1, i32 %a2, ptr %a3) align 2 personality ptr @f0 {
b0:
%v0 = alloca %s.0, align 8
br label %b1
b1: ; preds = %b0
invoke void @f5(ptr nonnull sret(%s.10) align 8 undef, ptr nonnull undef)
to label %b6 unwind label %b3
b2: ; preds = %b2
%v1 = invoke nonnull align 8 dereferenceable(24) ptr @f6(ptr undef, i64 undef, i64 1)
to label %b2 unwind label %b4
b3: ; preds = %b1
%v2 = landingpad { ptr, i32 }
cleanup
br label %b5
b4: ; preds = %b2
%v3 = landingpad { ptr, i32 }
cleanup
br label %b5
b5: ; preds = %b4, %b3
resume { ptr, i32 } undef
b6: ; preds = %b1
invoke void @f1(ptr nonnull %v0)
to label %b8 unwind label %b7
b7: ; preds = %b6
%v4 = landingpad { ptr, i32 }
cleanup
br label %b20
b8: ; preds = %b6
invoke void @f2(ptr sret(%s.10) align 8 undef, ptr undef)
to label %b10 unwind label %b14
b9: ; No predecessors!
br label %b16
b10: ; preds = %b8
%v6 = invoke i32 @f7(ptr nonnull undef, i64 0, i64 -1, ptr @g0, i64 undef)
to label %b12 unwind label %b11
b11: ; preds = %b10
%v7 = landingpad { ptr, i32 }
catch ptr null
unreachable
b12: ; preds = %b10
invoke void @f3(ptr nonnull sret(%s.10) align 8 undef, ptr %a1, i32 %a2)
to label %b13 unwind label %b15
b13: ; preds = %b12
unreachable
b14: ; preds = %b8
%v8 = landingpad { ptr, i32 }
cleanup
br label %b16
b15: ; preds = %b12
%v9 = landingpad { ptr, i32 }
cleanup
br label %b16
b16: ; preds = %b15, %b14, %b9
br label %b17
b17: ; preds = %b16
%v12 = load ptr, ptr %v0, align 8
br label %b18
b18: ; preds = %b17
call void undef(ptr nonnull %v12)
br label %b19
b19: ; preds = %b18
store ptr null, ptr %v0, align 8
br label %b20
b20: ; preds = %b19, %b7
resume { ptr, i32 } undef
}
declare hidden void @f5(ptr, ptr)
declare ptr @f6(ptr, i64, i64)
declare i32 @f7(ptr, i64, i64, ptr, i64)
|