brintos

brintos / llvm-project-archived public Read only

0
0
Text · 31.9 KiB · e1fce4e Raw
471 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals2; RUN: opt -passes=globalopt -S %s | FileCheck %s3 4%struct.20ptr = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }5 6@global.20ptr = internal global %struct.20ptr zeroinitializer7 8@c = global ptr null9 10;.11; CHECK: @[[C:[a-zA-Z0-9_$"\\.-]+]] = global ptr null12; CHECK: @[[GLOBAL_20PTR_3:[a-zA-Z0-9_$"\\.-]+]] = internal unnamed_addr global [[STRUCT_20PTR:%.*]] { ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr null, ptr null, ptr null, ptr @c }13; CHECK: @[[GLOBAL_20PTR_4_16:[a-zA-Z0-9_$"\\.-]+]] = internal unnamed_addr global ptr null14;.15define void @store_initializer() {16; CHECK-LABEL: @store_initializer(17; CHECK-NEXT:  entry:18; CHECK-NEXT:    store volatile ptr null, ptr @c, align 819; CHECK-NEXT:    store volatile ptr null, ptr @c, align 820; CHECK-NEXT:    store volatile ptr null, ptr @c, align 821; CHECK-NEXT:    store volatile ptr null, ptr @c, align 822; CHECK-NEXT:    store volatile ptr null, ptr @c, align 823; CHECK-NEXT:    store volatile ptr null, ptr @c, align 824; CHECK-NEXT:    store volatile ptr null, ptr @c, align 825; CHECK-NEXT:    store volatile ptr null, ptr @c, align 826; CHECK-NEXT:    store volatile ptr null, ptr @c, align 827; CHECK-NEXT:    store volatile ptr null, ptr @c, align 828; CHECK-NEXT:    store volatile ptr null, ptr @c, align 829; CHECK-NEXT:    store volatile ptr null, ptr @c, align 830; CHECK-NEXT:    store volatile ptr null, ptr @c, align 831; CHECK-NEXT:    store volatile ptr null, ptr @c, align 832; CHECK-NEXT:    store volatile ptr null, ptr @c, align 833; CHECK-NEXT:    store volatile ptr null, ptr @c, align 834; CHECK-NEXT:    store volatile ptr null, ptr @c, align 835; CHECK-NEXT:    ret void36;37entry:38  store ptr null, ptr @global.20ptr, align 839  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 1), align 840  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 2), align 841  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 3), align 842  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 4), align 843  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 5), align 844  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 6), align 845  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 7), align 846  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 8), align 847  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 9), align 848  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 10), align 849  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 11), align 850  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 12), align 851  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 13), align 852  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 14), align 853  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 15), align 854  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 16), align 855 56  %l0 = load ptr, ptr @global.20ptr, align 857  store volatile ptr %l0, ptr @c58  %l1 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 1), align 859  store volatile ptr %l1, ptr @c60  %l2 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 2), align 861  store volatile ptr %l2, ptr @c62  %l3 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 3), align 863  store volatile ptr %l3, ptr @c64  %l4 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 4), align 865  store volatile ptr %l4, ptr @c66  %l5 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 5), align 867  store volatile ptr %l5, ptr @c68  %l6 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 6), align 869  store volatile ptr %l6, ptr @c70  %l7 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 7), align 871  store volatile ptr %l7, ptr @c72  %l8 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 8), align 873  store volatile ptr %l8, ptr @c74  %l9 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 9), align 875  store volatile ptr %l9, ptr @c76  %l10 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 10), align 877  store volatile ptr %l10, ptr @c78  %l11 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 11), align 879  store volatile ptr %l11, ptr @c80  %l12 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 12), align 881  store volatile ptr %l12, ptr @c82  %l13 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 13), align 883  store volatile ptr %l13, ptr @c84  %l14 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 14), align 885  store volatile ptr %l14, ptr @c86  %l15 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 15), align 887  store volatile ptr %l15, ptr @c88  %l16 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr, i64 0, i32 16), align 889  store volatile ptr %l16, ptr @c90 91  ret void92}93 94; Global with initializer where some elements in the initializer are not null.95 96@global.20ptr.2 = internal global %struct.20ptr { ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr @c }97 98define void @store_null_initializer_2() {99; CHECK-LABEL: @store_null_initializer_2(100; CHECK-NEXT:  entry:101; CHECK-NEXT:    store volatile ptr null, ptr @c, align 8102; CHECK-NEXT:    store volatile ptr null, ptr @c, align 8103; CHECK-NEXT:    store volatile ptr null, ptr @c, align 8104; CHECK-NEXT:    store volatile ptr null, ptr @c, align 8105; CHECK-NEXT:    store volatile ptr null, ptr @c, align 8106; CHECK-NEXT:    store volatile ptr null, ptr @c, align 8107; CHECK-NEXT:    store volatile ptr null, ptr @c, align 8108; CHECK-NEXT:    store volatile ptr null, ptr @c, align 8109; CHECK-NEXT:    store volatile ptr null, ptr @c, align 8110; CHECK-NEXT:    store volatile ptr null, ptr @c, align 8111; CHECK-NEXT:    store volatile ptr null, ptr @c, align 8112; CHECK-NEXT:    store volatile ptr null, ptr @c, align 8113; CHECK-NEXT:    store volatile ptr null, ptr @c, align 8114; CHECK-NEXT:    store volatile ptr null, ptr @c, align 8115; CHECK-NEXT:    store volatile ptr null, ptr @c, align 8116; CHECK-NEXT:    store volatile ptr null, ptr @c, align 8117; CHECK-NEXT:    store volatile ptr null, ptr @c, align 8118; CHECK-NEXT:    store volatile ptr null, ptr @c, align 8119; CHECK-NEXT:    ret void120;121entry:122  store ptr null, ptr @global.20ptr.2, align 8123  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 1), align 8124  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 2), align 8125  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 3), align 8126  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 4), align 8127  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 5), align 8128  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 6), align 8129  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 7), align 8130  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 8), align 8131  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 9), align 8132  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 10), align 8133  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 11), align 8134  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 12), align 8135  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 13), align 8136  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 14), align 8137  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 15), align 8138  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 16), align 8139  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 19), align 8140 141  %l0 = load ptr, ptr @global.20ptr.2, align 8142  store volatile ptr %l0, ptr @c143  %l1 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 1), align 8144  store volatile ptr %l1, ptr @c145  %l2 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 2), align 8146  store volatile ptr %l2, ptr @c147  %l3 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 3), align 8148  store volatile ptr %l3, ptr @c149  %l4 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 4), align 8150  store volatile ptr %l4, ptr @c151  %l5 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 5), align 8152  store volatile ptr %l5, ptr @c153  %l6 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 6), align 8154  store volatile ptr %l6, ptr @c155  %l7 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 7), align 8156  store volatile ptr %l7, ptr @c157  %l8 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 8), align 8158  store volatile ptr %l8, ptr @c159  %l9 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 9), align 8160  store volatile ptr %l9, ptr @c161  %l10 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 10), align 8162  store volatile ptr %l10, ptr @c163  %l11 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 11), align 8164  store volatile ptr %l11, ptr @c165  %l12 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 12), align 8166  store volatile ptr %l12, ptr @c167  %l13 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 13), align 8168  store volatile ptr %l13, ptr @c169  %l14 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 14), align 8170  store volatile ptr %l14, ptr @c171  %l15 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 15), align 8172  store volatile ptr %l15, ptr @c173  %l16 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 16), align 8174  store volatile ptr %l16, ptr @c175  %l19 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.2, i64 0, i32 19), align 8176  store volatile ptr %l19, ptr @c177 178  ret void179}180 181 182@global.20ptr.3 = internal global %struct.20ptr { ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr null, ptr null, ptr null, ptr @c }183 184; Stores writing a different value than the initializer.185define void @store_mixed_initializer_negative() {186; CHECK-LABEL: @store_mixed_initializer_negative(187; CHECK-NEXT:  entry:188; CHECK-NEXT:    store ptr null, ptr @global.20ptr.3, align 8189; CHECK-NEXT:    store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR:%.*]], ptr @global.20ptr.3, i64 0, i32 1), align 8190; CHECK-NEXT:    store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 2), align 8191; CHECK-NEXT:    store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 3), align 8192; CHECK-NEXT:    store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 4), align 8193; CHECK-NEXT:    store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 5), align 8194; CHECK-NEXT:    store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 6), align 8195; CHECK-NEXT:    store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 7), align 8196; CHECK-NEXT:    store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 8), align 8197; CHECK-NEXT:    store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 9), align 8198; CHECK-NEXT:    store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 10), align 8199; CHECK-NEXT:    store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 11), align 8200; CHECK-NEXT:    store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 12), align 8201; CHECK-NEXT:    store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 13), align 8202; CHECK-NEXT:    store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 14), align 8203; CHECK-NEXT:    store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 15), align 8204; CHECK-NEXT:    store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 16), align 8205; CHECK-NEXT:    store ptr null, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 19), align 8206; CHECK-NEXT:    [[L0:%.*]] = load ptr, ptr @global.20ptr.3, align 8207; CHECK-NEXT:    store volatile ptr [[L0]], ptr @c, align 8208; CHECK-NEXT:    [[L1:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 1), align 8209; CHECK-NEXT:    store volatile ptr [[L1]], ptr @c, align 8210; CHECK-NEXT:    [[L2:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 2), align 8211; CHECK-NEXT:    store volatile ptr [[L2]], ptr @c, align 8212; CHECK-NEXT:    [[L3:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 3), align 8213; CHECK-NEXT:    store volatile ptr [[L3]], ptr @c, align 8214; CHECK-NEXT:    [[L4:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 4), align 8215; CHECK-NEXT:    store volatile ptr [[L4]], ptr @c, align 8216; CHECK-NEXT:    [[L5:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 5), align 8217; CHECK-NEXT:    store volatile ptr [[L5]], ptr @c, align 8218; CHECK-NEXT:    [[L6:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 6), align 8219; CHECK-NEXT:    store volatile ptr [[L6]], ptr @c, align 8220; CHECK-NEXT:    [[L7:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 7), align 8221; CHECK-NEXT:    store volatile ptr [[L7]], ptr @c, align 8222; CHECK-NEXT:    [[L8:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 8), align 8223; CHECK-NEXT:    store volatile ptr [[L8]], ptr @c, align 8224; CHECK-NEXT:    [[L9:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 9), align 8225; CHECK-NEXT:    store volatile ptr [[L9]], ptr @c, align 8226; CHECK-NEXT:    [[L10:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 10), align 8227; CHECK-NEXT:    store volatile ptr [[L10]], ptr @c, align 8228; CHECK-NEXT:    [[L11:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 11), align 8229; CHECK-NEXT:    store volatile ptr [[L11]], ptr @c, align 8230; CHECK-NEXT:    [[L12:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 12), align 8231; CHECK-NEXT:    store volatile ptr [[L12]], ptr @c, align 8232; CHECK-NEXT:    [[L13:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 13), align 8233; CHECK-NEXT:    store volatile ptr [[L13]], ptr @c, align 8234; CHECK-NEXT:    [[L14:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 14), align 8235; CHECK-NEXT:    store volatile ptr [[L14]], ptr @c, align 8236; CHECK-NEXT:    [[L15:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 15), align 8237; CHECK-NEXT:    store volatile ptr [[L15]], ptr @c, align 8238; CHECK-NEXT:    [[L16:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 16), align 8239; CHECK-NEXT:    store volatile ptr [[L16]], ptr @c, align 8240; CHECK-NEXT:    [[L19:%.*]] = load ptr, ptr getelementptr inbounds ([[STRUCT_20PTR]], ptr @global.20ptr.3, i64 0, i32 19), align 8241; CHECK-NEXT:    store volatile ptr [[L19]], ptr @c, align 8242; CHECK-NEXT:    ret void243;244entry:245  store ptr null, ptr @global.20ptr.3, align 8246  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 1), align 8247  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 2), align 8248  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 3), align 8249  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 4), align 8250  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 5), align 8251  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 6), align 8252  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 7), align 8253  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 8), align 8254  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 9), align 8255  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 10), align 8256  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 11), align 8257  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 12), align 8258  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 13), align 8259  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 14), align 8260  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 15), align 8261  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 16), align 8262  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 19), align 8263 264  %l0 = load ptr, ptr @global.20ptr.3, align 8265  store volatile ptr %l0, ptr @c266  %l1 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 1), align 8267  store volatile ptr %l1, ptr @c268  %l2 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 2), align 8269  store volatile ptr %l2, ptr @c270  %l3 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 3), align 8271  store volatile ptr %l3, ptr @c272  %l4 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 4), align 8273  store volatile ptr %l4, ptr @c274  %l5 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 5), align 8275  store volatile ptr %l5, ptr @c276  %l6 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 6), align 8277  store volatile ptr %l6, ptr @c278  %l7 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 7), align 8279  store volatile ptr %l7, ptr @c280  %l8 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 8), align 8281  store volatile ptr %l8, ptr @c282  %l9 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 9), align 8283  store volatile ptr %l9, ptr @c284  %l10 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 10), align 8285  store volatile ptr %l10, ptr @c286  %l11 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 11), align 8287  store volatile ptr %l11, ptr @c288  %l12 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 12), align 8289  store volatile ptr %l12, ptr @c290  %l13 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 13), align 8291  store volatile ptr %l13, ptr @c292  %l14 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 14), align 8293  store volatile ptr %l14, ptr @c294  %l15 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 15), align 8295  store volatile ptr %l15, ptr @c296  %l16 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 16), align 8297  store volatile ptr %l16, ptr @c298  %l19 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.3, i64 0, i32 19), align 8299  store volatile ptr %l19, ptr @c300 301  ret void302}303 304 305@global.20ptr.4 = internal global %struct.20ptr { ptr null, ptr null, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr @c, ptr null, ptr null, ptr null, ptr @c }306 307; Stores writing a different value than the initializer.308define void @store_mixed_initializer() {309; CHECK-LABEL: @store_mixed_initializer(310; CHECK-NEXT:  entry:311; CHECK-NEXT:    store ptr @c, ptr @global.20ptr.4.16, align 8312; CHECK-NEXT:    store volatile ptr null, ptr @c, align 8313; CHECK-NEXT:    store volatile ptr null, ptr @c, align 8314; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8315; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8316; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8317; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8318; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8319; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8320; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8321; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8322; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8323; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8324; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8325; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8326; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8327; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8328; CHECK-NEXT:    [[L16:%.*]] = load ptr, ptr @global.20ptr.4.16, align 8329; CHECK-NEXT:    store volatile ptr [[L16]], ptr @c, align 8330; CHECK-NEXT:    ret void331;332entry:333  store ptr null, ptr @global.20ptr.4, align 8334  store ptr null, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 1), align 8335  store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 2), align 8336  store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 3), align 8337  store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 4), align 8338  store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 5), align 8339  store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 6), align 8340  store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 7), align 8341  store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 8), align 8342  store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 9), align 8343  store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 10), align 8344  store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 11), align 8345  store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 12), align 8346  store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 13), align 8347  store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 14), align 8348  store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 15), align 8349  store ptr @c, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 16), align 8350 351  %l0 = load ptr, ptr @global.20ptr.4, align 8352  store volatile ptr %l0, ptr @c353  %l1 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 1), align 8354  store volatile ptr %l1, ptr @c355  %l2 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 2), align 8356  store volatile ptr %l2, ptr @c357  %l3 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 3), align 8358  store volatile ptr %l3, ptr @c359  %l4 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 4), align 8360  store volatile ptr %l4, ptr @c361  %l5 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 5), align 8362  store volatile ptr %l5, ptr @c363  %l6 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 6), align 8364  store volatile ptr %l6, ptr @c365  %l7 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 7), align 8366  store volatile ptr %l7, ptr @c367  %l8 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 8), align 8368  store volatile ptr %l8, ptr @c369  %l9 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 9), align 8370  store volatile ptr %l9, ptr @c371  %l10 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 10), align 8372  store volatile ptr %l10, ptr @c373  %l11 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 11), align 8374  store volatile ptr %l11, ptr @c375  %l12 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 12), align 8376  store volatile ptr %l12, ptr @c377  %l13 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 13), align 8378  store volatile ptr %l13, ptr @c379  %l14 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 14), align 8380  store volatile ptr %l14, ptr @c381  %l15 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 15), align 8382  store volatile ptr %l15, ptr @c383  %l16 = load ptr, ptr getelementptr inbounds (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 16), align 8384  store volatile ptr %l16, ptr @c385 386  ret void387}388 389; Same as @store_mixed_initializer, but the GEP constant expressions are not390; inbounds.391define void @store_mixed_initializer_geps_without_inbounds() {392; CHECK-LABEL: @store_mixed_initializer_geps_without_inbounds(393; CHECK-NEXT:  entry:394; CHECK-NEXT:    store ptr @c, ptr @global.20ptr.4.16, align 8395; CHECK-NEXT:    store volatile ptr null, ptr @c, align 8396; CHECK-NEXT:    store volatile ptr null, ptr @c, align 8397; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8398; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8399; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8400; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8401; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8402; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8403; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8404; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8405; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8406; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8407; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8408; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8409; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8410; CHECK-NEXT:    store volatile ptr @c, ptr @c, align 8411; CHECK-NEXT:    [[L16:%.*]] = load ptr, ptr @global.20ptr.4.16, align 8412; CHECK-NEXT:    store volatile ptr [[L16]], ptr @c, align 8413; CHECK-NEXT:    ret void414;415entry:416  store ptr null, ptr @global.20ptr.4, align 8417  store ptr null, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 1), align 8418  store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 2), align 8419  store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 3), align 8420  store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 4), align 8421  store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 5), align 8422  store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 6), align 8423  store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 7), align 8424  store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 8), align 8425  store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 9), align 8426  store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 10), align 8427  store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 11), align 8428  store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 12), align 8429  store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 13), align 8430  store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 14), align 8431  store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 15), align 8432  store ptr @c, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 16), align 8433 434  %l0 = load ptr, ptr @global.20ptr.4, align 8435  store volatile ptr %l0, ptr @c436  %l1 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 1), align 8437  store volatile ptr %l1, ptr @c438  %l2 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 2), align 8439  store volatile ptr %l2, ptr @c440  %l3 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 3), align 8441  store volatile ptr %l3, ptr @c442  %l4 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 4), align 8443  store volatile ptr %l4, ptr @c444  %l5 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 5), align 8445  store volatile ptr %l5, ptr @c446  %l6 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 6), align 8447  store volatile ptr %l6, ptr @c448  %l7 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 7), align 8449  store volatile ptr %l7, ptr @c450  %l8 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 8), align 8451  store volatile ptr %l8, ptr @c452  %l9 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 9), align 8453  store volatile ptr %l9, ptr @c454  %l10 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 10), align 8455  store volatile ptr %l10, ptr @c456  %l11 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 11), align 8457  store volatile ptr %l11, ptr @c458  %l12 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 12), align 8459  store volatile ptr %l12, ptr @c460  %l13 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 13), align 8461  store volatile ptr %l13, ptr @c462  %l14 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 14), align 8463  store volatile ptr %l14, ptr @c464  %l15 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 15), align 8465  store volatile ptr %l15, ptr @c466  %l16 = load ptr, ptr getelementptr (%struct.20ptr, ptr @global.20ptr.4, i64 0, i32 16), align 8467  store volatile ptr %l16, ptr @c468 469  ret void470}471