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