brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.4 KiB · c59bd93 Raw
289 lines · plain
1; RUN: opt < %s -passes=instcombine -S | FileCheck %s2 3@T1 = external constant i324@T2 = external constant i325@T3 = external constant i326 7declare i32 @generic_personality(i32, i64, ptr, ptr)8declare i32 @__gxx_personality_v0(i32, i64, ptr, ptr)9declare i32 @__objc_personality_v0(i32, i64, ptr, ptr)10declare i32 @__C_specific_handler(...)11 12declare void @bar()13 14define void @foo_generic() personality ptr @generic_personality {15; CHECK-LABEL: @foo_generic(16  invoke void @bar()17    to label %cont.a unwind label %lpad.a18cont.a:19  invoke void @bar()20    to label %cont.b unwind label %lpad.b21cont.b:22  invoke void @bar()23    to label %cont.c unwind label %lpad.c24cont.c:25  invoke void @bar()26    to label %cont.d unwind label %lpad.d27cont.d:28  invoke void @bar()29    to label %cont.e unwind label %lpad.e30cont.e:31  invoke void @bar()32    to label %cont.f unwind label %lpad.f33cont.f:34  invoke void @bar()35    to label %cont.g unwind label %lpad.g36cont.g:37  invoke void @bar()38    to label %cont.h unwind label %lpad.h39cont.h:40  invoke void @bar()41    to label %cont.i unwind label %lpad.i42cont.i:43  ret void44 45lpad.a:46  %a = landingpad { ptr, i32 }47          catch ptr @T148          catch ptr @T249          catch ptr @T150          catch ptr @T251  unreachable52; CHECK: %a = landingpad53; CHECK-NEXT: @T154; CHECK-NEXT: @T255; CHECK-NEXT: unreachable56 57lpad.b:58  %b = landingpad { ptr, i32 }59          filter [0 x ptr] zeroinitializer60          catch ptr @T161  unreachable62; CHECK: %b = landingpad63; CHECK-NEXT: filter64; CHECK-NEXT: unreachable65 66lpad.c:67  %c = landingpad { ptr, i32 }68          catch ptr @T169          filter [1 x ptr] [ptr @T1]70          catch ptr @T271  unreachable72; Caught types should not be removed from filters73; CHECK: %c = landingpad74; CHECK-NEXT: catch ptr @T175; CHECK-NEXT: filter [1 x ptr] [ptr @T1]76; CHECK-NEXT: catch ptr @T2 77; CHECK-NEXT: unreachable78 79lpad.d:80  %d = landingpad { ptr, i32 }81          filter [3 x ptr] zeroinitializer82  unreachable83; CHECK: %d = landingpad84; CHECK-NEXT: filter [1 x ptr] zeroinitializer85; CHECK-NEXT: unreachable86 87lpad.e:88  %e = landingpad { ptr, i32 }89          catch ptr @T190          filter [3 x ptr] [ptr @T1, ptr @T2, ptr @T2]91  unreachable92; Caught types should not be removed from filters93; CHECK: %e = landingpad94; CHECK-NEXT: catch ptr @T195; CHECK-NEXT: filter [2 x ptr] [ptr @T1, ptr @T2]96; CHECK-NEXT: unreachable97 98lpad.f:99  %f = landingpad { ptr, i32 }100          filter [2 x ptr] [ptr @T2, ptr @T1]101          filter [1 x ptr] [ptr @T1]102  unreachable103; CHECK: %f = landingpad104; CHECK-NEXT: filter [1 x ptr] [ptr @T1]105; CHECK-NEXT: unreachable106 107lpad.g:108  %g = landingpad { ptr, i32 }109          filter [1 x ptr] [ptr @T1]110          catch ptr @T3111          filter [2 x ptr] [ptr @T2, ptr @T1]112  unreachable113; CHECK: %g = landingpad114; CHECK-NEXT: filter [1 x ptr] [ptr @T1]115; CHECK-NEXT: catch ptr @T3116; CHECK-NEXT: unreachable117 118lpad.h:119  %h = landingpad { ptr, i32 }120          filter [2 x ptr] [ptr @T1, ptr null]121          filter [1 x ptr] zeroinitializer122  unreachable123; CHECK: %h = landingpad124; CHECK-NEXT: filter [1 x ptr] zeroinitializer125; CHECK-NEXT: unreachable126 127lpad.i:128  %i = landingpad { ptr, i32 }129          cleanup130          filter [0 x ptr] zeroinitializer131  unreachable132; CHECK: %i = landingpad133; CHECK-NEXT: filter134; CHECK-NEXT: unreachable135}136 137define void @foo_cxx() personality ptr @__gxx_personality_v0 {138; CHECK-LABEL: @foo_cxx(139  invoke void @bar()140    to label %cont.a unwind label %lpad.a141cont.a:142  invoke void @bar()143    to label %cont.b unwind label %lpad.b144cont.b:145  invoke void @bar()146    to label %cont.c unwind label %lpad.c147cont.c:148  invoke void @bar()149    to label %cont.d unwind label %lpad.d150cont.d:151  ret void152 153lpad.a:154  %a = landingpad { ptr, i32 }155          catch ptr null156          catch ptr @T1157  unreachable158; CHECK: %a = landingpad159; CHECK-NEXT: null160; CHECK-NEXT: unreachable161 162lpad.b:163  %b = landingpad { ptr, i32 }164          filter [1 x ptr] zeroinitializer165  unreachable166; CHECK: %b = landingpad167; CHECK-NEXT: cleanup168; CHECK-NEXT: unreachable169 170lpad.c:171  %c = landingpad { ptr, i32 }172          filter [2 x ptr] [ptr @T1, ptr null]173  unreachable174; CHECK: %c = landingpad175; CHECK-NEXT: cleanup176; CHECK-NEXT: unreachable177 178lpad.d:179  %d = landingpad { ptr, i32 }180          cleanup181          catch ptr null182  unreachable183; CHECK: %d = landingpad184; CHECK-NEXT: null185; CHECK-NEXT: unreachable186}187 188define void @foo_objc() personality ptr @__objc_personality_v0 {189; CHECK-LABEL: @foo_objc(190  invoke void @bar()191    to label %cont.a unwind label %lpad.a192cont.a:193  invoke void @bar()194    to label %cont.b unwind label %lpad.b195cont.b:196  invoke void @bar()197    to label %cont.c unwind label %lpad.c198cont.c:199  invoke void @bar()200    to label %cont.d unwind label %lpad.d201cont.d:202  ret void203 204lpad.a:205  %a = landingpad { ptr, i32 }206          catch ptr null207          catch ptr @T1208  unreachable209; CHECK: %a = landingpad210; CHECK-NEXT: null211; CHECK-NEXT: unreachable212 213lpad.b:214  %b = landingpad { ptr, i32 }215          filter [1 x ptr] zeroinitializer216  unreachable217; CHECK: %b = landingpad218; CHECK-NEXT: cleanup219; CHECK-NEXT: unreachable220 221lpad.c:222  %c = landingpad { ptr, i32 }223          filter [2 x ptr] [ptr @T1, ptr null]224  unreachable225; CHECK: %c = landingpad226; CHECK-NEXT: cleanup227; CHECK-NEXT: unreachable228 229lpad.d:230  %d = landingpad { ptr, i32 }231          cleanup232          catch ptr null233  unreachable234; CHECK: %d = landingpad235; CHECK-NEXT: null236; CHECK-NEXT: unreachable237}238 239define void @foo_seh() personality ptr @__C_specific_handler {240; CHECK-LABEL: @foo_seh(241  invoke void @bar()242    to label %cont.a unwind label %lpad.a243cont.a:244  invoke void @bar()245    to label %cont.b unwind label %lpad.b246cont.b:247  invoke void @bar()248    to label %cont.c unwind label %lpad.c249cont.c:250  invoke void @bar()251    to label %cont.d unwind label %lpad.d252cont.d:253  ret void254 255lpad.a:256  %a = landingpad { ptr, i32 }257          catch ptr null258          catch ptr @T1259  unreachable260; CHECK: %a = landingpad261; CHECK-NEXT: null262; CHECK-NEXT: unreachable263 264lpad.b:265  %b = landingpad { ptr, i32 }266          filter [1 x ptr] zeroinitializer267  unreachable268; CHECK: %b = landingpad269; CHECK-NEXT: cleanup270; CHECK-NEXT: unreachable271 272lpad.c:273  %c = landingpad { ptr, i32 }274          filter [2 x ptr] [ptr @T1, ptr null]275  unreachable276; CHECK: %c = landingpad277; CHECK-NEXT: cleanup278; CHECK-NEXT: unreachable279 280lpad.d:281  %d = landingpad { ptr, i32 }282          cleanup283          catch ptr null284  unreachable285; CHECK: %d = landingpad286; CHECK-NEXT: null287; CHECK-NEXT: unreachable288}289