brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · b0f62af Raw
148 lines · plain
1; RUN: opt < %s -passes=globalopt -S | FileCheck %s2; CHECK-NOT: CTOR3%ini = type { i32, ptr, ptr }4@llvm.global_ctors = appending global [16 x %ini] [5	%ini { i32 65534, ptr @CTOR1, ptr null },6	%ini { i32 65535, ptr @CTOR1, ptr null },7	%ini { i32 65535, ptr @CTOR1, ptr null },8	%ini { i32 65535, ptr @CTOR2, ptr null },9	%ini { i32 65535, ptr @CTOR3, ptr null },10	%ini { i32 65535, ptr @CTOR4, ptr null },11	%ini { i32 65535, ptr @CTOR5, ptr null },12	%ini { i32 65535, ptr @CTOR6, ptr null },13	%ini { i32 65535, ptr @CTOR7, ptr null },14	%ini { i32 65535, ptr @CTOR8, ptr null },15	%ini { i32 65535, ptr @CTOR9, ptr null },16	%ini { i32 65535, ptr @CTOR14,ptr null },17	%ini { i32 65536, ptr @CTOR10_EXTERNAL, ptr null },18	%ini { i32 65536, ptr @CTOR11, ptr null },19	%ini { i32 65537, ptr @CTOR12, ptr null },20	%ini { i32 2147483647, ptr null, ptr null }21]22 23@G = global i32 0		; <ptr> [#uses=1]24@G2 = global i32 0		; <ptr> [#uses=1]25@G3 = global i32 -123		; <ptr> [#uses=2]26@X = global { i32, [2 x i32] } { i32 0, [2 x i32] [ i32 17, i32 21 ] }		; <ptr> [#uses=2]27@Y = global i32 -1		; <ptr> [#uses=2]28@Z = global i32 123		; <ptr> [#uses=1]29@D = global double 0.000000e+00		; <ptr> [#uses=1]30@CTORGV = internal global i1 false		; <ptr> [#uses=2]31@GA = global i32 0		; <ptr> [#uses=1]32@GA14 = global i32 0		; <ptr> [#uses=1]33 34define internal void @CTOR1() {35	ret void36}37 38define internal void @CTOR2() {39	%A = add i32 1, 23		; <i32> [#uses=1]40	store i32 %A, ptr @G41	store i1 true, ptr @CTORGV42	ret void43}44 45define internal void @CTOR3() {46	%X = or i1 true, false		; <i1> [#uses=1]47	br label %Cont48 49Cont:		; preds = %050	br i1 %X, label %S, label %T51 52S:		; preds = %Cont53	store i32 24, ptr @G254	ret void55 56T:		; preds = %Cont57	ret void58}59 60define internal void @CTOR4() {61	%X = load i32, ptr @G3		; <i32> [#uses=1]62	%Y = add i32 %X, 123		; <i32> [#uses=1]63	store i32 %Y, ptr @G364	ret void65}66 67define internal void @CTOR5() {68	%X.2p = getelementptr inbounds { i32, [2 x i32] }, ptr @X, i32 0, i32 1, i32 0		; <ptr> [#uses=2]69	%X.2 = load i32, ptr %X.2p		; <i32> [#uses=1]70	%X.1p = getelementptr inbounds { i32, [2 x i32] }, ptr @X, i32 0, i32 0		; <ptr> [#uses=1]71	store i32 %X.2, ptr %X.1p72	store i32 42, ptr %X.2p73	ret void74}75 76define internal void @CTOR6() {77	%A = alloca i32		; <ptr> [#uses=2]78	%y = load i32, ptr @Y		; <i32> [#uses=1]79	store i32 %y, ptr %A80	%Av = load i32, ptr %A		; <i32> [#uses=1]81	%Av1 = add i32 %Av, 1		; <i32> [#uses=1]82	store i32 %Av1, ptr @Y83	ret void84}85 86define internal void @CTOR7() {87	call void @setto( ptr @Z, i32 0 )88	ret void89}90 91define void @setto(ptr %P, i32 %V) {92	store i32 %V, ptr %P93	ret void94}95 96declare double @cos(double)97 98define internal void @CTOR8() {99	%X = call double @cos( double 0.000000e+00 )		; <double> [#uses=1]100	store double %X, ptr @D101	ret void102}103 104define i1 @accessor() {105	%V = load i1, ptr @CTORGV		; <i1> [#uses=1]106	ret i1 %V107}108 109%struct.A = type { i32 }110%struct.B = type { ptr, ptr, [4 x i8] }111@GV1 = global %struct.B zeroinitializer, align 8112@GV2 =  constant [3 x ptr] [ptr inttoptr (i64 16 to ptr), ptr null, ptr null]113; CHECK-NOT: CTOR9114define internal void @CTOR9() {115entry:116  %0 = getelementptr inbounds i8, ptr @GV1, i64 16117  store ptr getelementptr inbounds ([3 x ptr], ptr @GV2, i64 1, i64 0), ptr @GV1118  ret void119}120 121; CHECK: CTOR10_EXTERNAL122declare external void @CTOR10_EXTERNAL();123 124; CHECK-NOT: CTOR11125define internal void @CTOR11() {126	ret void127}128 129; CHECK: CTOR12130define internal void @CTOR12() {131	ret void132}133 134; CHECK-NOT: CTOR13135define internal void @CTOR13() {136  store atomic i32 123, ptr @GA seq_cst, align 4137  ret void138}139 140; CHECK-NOT: CTOR14141define internal void @CTOR14() {142  %X = load atomic i32, ptr @GA14 seq_cst, align 4143  %Y = add i32 %X, 124144  store i32 %Y, ptr @GA14145  ret void146}147 148