brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.1 KiB · ce457ec Raw
180 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.widget = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }5 6@global = internal global %struct.widget zeroinitializer7 8;.9; CHECK: @[[A:[a-zA-Z0-9_$"\\.-]+]] = global i8 0, align 410;.11define internal void @read_struct() {12; CHECK-LABEL: @read_struct(13; CHECK-NEXT:    ret void14;15  %tmp = load ptr, ptr getelementptr inbounds (%struct.widget, ptr @global, i64 0, i32 16), align 816  ret void17}18 19define void @write_struct() {20; CHECK-LABEL: @write_struct(21; CHECK-NEXT:    tail call fastcc void @read_struct()22; CHECK-NEXT:    ret void23;24  store ptr null, ptr @global, align 825  store ptr null, ptr getelementptr inbounds (%struct.widget, ptr @global, i64 0, i32 1), align 826  store ptr null, ptr getelementptr inbounds (%struct.widget, ptr @global, i64 0, i32 2), align 827  store ptr null, ptr getelementptr inbounds (%struct.widget, ptr @global, i64 0, i32 3), align 828  store ptr null, ptr getelementptr inbounds (%struct.widget, ptr @global, i64 0, i32 4), align 829  store ptr null, ptr getelementptr inbounds (%struct.widget, ptr @global, i64 0, i32 5), align 830  store ptr null, ptr getelementptr inbounds (%struct.widget, ptr @global, i64 0, i32 6), align 831  store ptr null, ptr getelementptr inbounds (%struct.widget, ptr @global, i64 0, i32 7), align 832  store ptr null, ptr getelementptr inbounds (%struct.widget, ptr @global, i64 0, i32 8), align 833  store ptr null, ptr getelementptr inbounds (%struct.widget, ptr @global, i64 0, i32 9), align 834  store ptr null, ptr getelementptr inbounds (%struct.widget, ptr @global, i64 0, i32 10), align 835  store ptr null, ptr getelementptr inbounds (%struct.widget, ptr @global, i64 0, i32 11), align 836  store ptr null, ptr getelementptr inbounds (%struct.widget, ptr @global, i64 0, i32 12), align 837  store ptr null, ptr getelementptr inbounds (%struct.widget, ptr @global, i64 0, i32 13), align 838  store ptr null, ptr getelementptr inbounds (%struct.widget, ptr @global, i64 0, i32 14), align 839  store ptr null, ptr getelementptr inbounds (%struct.widget, ptr @global, i64 0, i32 15), align 840  tail call void @read_struct()41  ret void42}43 44 45%struct.with.array = type { [100 x i64], i64 }46 47@global.array_in_struct = internal global %struct.with.array zeroinitializer48 49define internal void @read_non_array_field() {50; CHECK-LABEL: @read_non_array_field(51; CHECK-NEXT:    ret void52;53  %tmp = load i64, ptr getelementptr inbounds (%struct.with.array, ptr @global.array_in_struct, i64 0, i32 1), align 854  ret void55}56 57define void @store_to_struct_array() {58; CHECK-LABEL: @store_to_struct_array(59; CHECK-NEXT:    tail call fastcc void @read_non_array_field()60; CHECK-NEXT:    ret void61;62  store i64 0, ptr @global.array_in_struct, align 863  store i64 0, ptr getelementptr inbounds (%struct.with.array, ptr @global.array_in_struct, i64 0, i32 0, i32 1), align 864  store i64 0, ptr getelementptr inbounds (%struct.with.array, ptr @global.array_in_struct, i64 0, i32 0, i32 2), align 865  store i64 0, ptr getelementptr inbounds (%struct.with.array, ptr @global.array_in_struct, i64 0, i32 0, i32 3), align 866  store i64 0, ptr getelementptr inbounds (%struct.with.array, ptr @global.array_in_struct, i64 0, i32 0, i32 4), align 867  store i64 0, ptr getelementptr inbounds (%struct.with.array, ptr @global.array_in_struct, i64 0, i32 0, i32 5), align 868  store i64 0, ptr getelementptr inbounds (%struct.with.array, ptr @global.array_in_struct, i64 0, i32 0, i32 6), align 869  store i64 0, ptr getelementptr inbounds (%struct.with.array, ptr @global.array_in_struct, i64 0, i32 0, i32 7), align 870  store i64 0, ptr getelementptr inbounds (%struct.with.array, ptr @global.array_in_struct, i64 0, i32 0, i32 8), align 871  store i64 0, ptr getelementptr inbounds (%struct.with.array, ptr @global.array_in_struct, i64 0, i32 0, i32 9), align 872  store i64 0, ptr getelementptr inbounds (%struct.with.array, ptr @global.array_in_struct, i64 0, i32 0, i32 10), align 873  store i64 0, ptr getelementptr inbounds (%struct.with.array, ptr @global.array_in_struct, i64 0, i32 0, i32 11), align 874  store i64 0, ptr getelementptr inbounds (%struct.with.array, ptr @global.array_in_struct, i64 0, i32 0, i32 12), align 875  store i64 0, ptr getelementptr inbounds (%struct.with.array, ptr @global.array_in_struct, i64 0, i32 0, i32 13), align 876  store i64 0, ptr getelementptr inbounds (%struct.with.array, ptr @global.array_in_struct, i64 0, i32 0, i32 14), align 877  store i64 0, ptr getelementptr inbounds (%struct.with.array, ptr @global.array_in_struct, i64 0, i32 0, i32 15), align 878  tail call void @read_non_array_field()79  ret void80}81 82@global.array = internal global [100 x i64] zeroinitializer83 84define internal void @read_array() {85; CHECK-LABEL: @read_array(86; CHECK-NEXT:    ret void87;88  %tmp = load i64, ptr getelementptr inbounds ([100 x i64], ptr @global.array, i64 0, i32 99), align 889  ret void90}91 92define void @store_to_array() {93; CHECK-LABEL: @store_to_array(94; CHECK-NEXT:    tail call fastcc void @read_array()95; CHECK-NEXT:    ret void96;97  store i64 0, ptr @global.array, align 898  store i64 0, ptr getelementptr inbounds ([100 x i64], ptr @global.array, i64 0, i32 1), align 899  store i64 0, ptr getelementptr inbounds ([100 x i64], ptr @global.array, i64 0, i32 2), align 8100  store i64 0, ptr getelementptr inbounds ([100 x i64], ptr @global.array, i64 0, i32 3), align 8101  store i64 0, ptr getelementptr inbounds ([100 x i64], ptr @global.array, i64 0, i32 4), align 8102  store i64 0, ptr getelementptr inbounds ([100 x i64], ptr @global.array, i64 0, i32 5), align 8103  store i64 0, ptr getelementptr inbounds ([100 x i64], ptr @global.array, i64 0, i32 6), align 8104  store i64 0, ptr getelementptr inbounds ([100 x i64], ptr @global.array, i64 0, i32 7), align 8105  store i64 0, ptr getelementptr inbounds ([100 x i64], ptr @global.array, i64 0, i32 8), align 8106  store i64 0, ptr getelementptr inbounds ([100 x i64], ptr @global.array, i64 0, i32 9), align 8107  store i64 0, ptr getelementptr inbounds ([100 x i64], ptr @global.array, i64 0, i32 10), align 8108  store i64 0, ptr getelementptr inbounds ([100 x i64], ptr @global.array, i64 0, i32 11), align 8109  store i64 0, ptr getelementptr inbounds ([100 x i64], ptr @global.array, i64 0, i32 12), align 8110  store i64 0, ptr getelementptr inbounds ([100 x i64], ptr @global.array, i64 0, i32 13), align 8111  store i64 0, ptr getelementptr inbounds ([100 x i64], ptr @global.array, i64 0, i32 14), align 8112  store i64 0, ptr getelementptr inbounds ([100 x i64], ptr @global.array, i64 0, i32 15), align 8113  tail call void @read_array()114  ret void115}116 117 118%struct.20i8 = type { i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8 }119@a = global i8 0, align 4120@b = internal global  %struct.20i8 { i8 4, i8 4, i8 4, i8 5, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 5, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4 }121 122define void @test_single_write_to_global_b() {123; CHECK-LABEL: @test_single_write_to_global_b(124; CHECK-NEXT:    store volatile i8 4, ptr @a, align 4125; CHECK-NEXT:    store volatile i8 4, ptr @a, align 4126; CHECK-NEXT:    store volatile i8 5, ptr @a, align 4127; CHECK-NEXT:    store volatile i8 4, ptr @a, align 4128; CHECK-NEXT:    store volatile i8 4, ptr @a, align 4129; CHECK-NEXT:    store volatile i8 4, ptr @a, align 4130; CHECK-NEXT:    store volatile i8 4, ptr @a, align 4131; CHECK-NEXT:    store volatile i8 4, ptr @a, align 4132; CHECK-NEXT:    store volatile i8 5, ptr @a, align 4133; CHECK-NEXT:    store volatile i8 4, ptr @a, align 4134; CHECK-NEXT:    store volatile i8 4, ptr @a, align 4135; CHECK-NEXT:    store volatile i8 4, ptr @a, align 4136; CHECK-NEXT:    store volatile i8 4, ptr @a, align 4137; CHECK-NEXT:    store volatile i8 4, ptr @a, align 4138; CHECK-NEXT:    store volatile i8 4, ptr @a, align 4139; CHECK-NEXT:    store volatile i8 4, ptr @a, align 4140; CHECK-NEXT:    store volatile i8 4, ptr @a, align 4141; CHECK-NEXT:    ret void142;143  store i8 0, ptr getelementptr inbounds (%struct.20i8, ptr @b, i64 0, i32 1), align 1144  %i3 = load i8, ptr @b, align 16145  store volatile i8 %i3, ptr @a, align 4146  %i4 = load i8, ptr getelementptr inbounds (%struct.20i8, ptr @b, i64 0, i32 2), align 2147  store volatile i8 %i4, ptr @a, align 4148  %i5 = load i8, ptr getelementptr inbounds (%struct.20i8, ptr @b, i64 0, i32 3), align 1149  store volatile i8 %i5, ptr @a, align 4150  %i6 = load i8, ptr getelementptr inbounds (%struct.20i8, ptr @b, i64 0, i32 4), align 4151  store volatile i8 %i6, ptr @a, align 4152  %i7 = load i8, ptr getelementptr inbounds (%struct.20i8, ptr @b, i64 0, i32 5), align 1153  store volatile i8 %i7, ptr @a, align 4154  %i8 = load i8, ptr getelementptr inbounds (%struct.20i8, ptr @b, i64 0, i32 7), align 1155  store volatile i8 %i8, ptr @a, align 4156  %i9 = load i8, ptr getelementptr inbounds (%struct.20i8, ptr @b, i64 0, i32 8), align 8157  store volatile i8 %i9, ptr @a, align 4158  %i10 = load i8, ptr getelementptr inbounds (%struct.20i8, ptr @b, i64 0, i32 9), align 1159  store volatile i8 %i10, ptr @a, align 4160  %i11 = load i8, ptr getelementptr inbounds (%struct.20i8, ptr @b, i64 0, i32 10), align 2161  store volatile i8 %i11, ptr @a, align 4162  %i12 = load i8, ptr getelementptr inbounds (%struct.20i8, ptr @b, i64 0, i32 11), align 1163  store volatile i8 %i12, ptr @a, align 4164  %i13 = load i8, ptr getelementptr inbounds (%struct.20i8, ptr @b, i64 0, i32 12), align 4165  store volatile i8 %i13, ptr @a, align 4166  %i14 = load i8, ptr getelementptr inbounds (%struct.20i8, ptr @b, i64 0, i32 13), align 1167  store volatile i8 %i14, ptr @a, align 4168  %i15 = load i8, ptr getelementptr inbounds (%struct.20i8, ptr @b, i64 0, i32 14), align 2169  store volatile i8 %i15, ptr @a, align 4170  %i16 = load i8, ptr getelementptr inbounds (%struct.20i8, ptr @b, i64 0, i32 15), align 1171  store volatile i8 %i16, ptr @a, align 4172  %i17 = load i8, ptr getelementptr inbounds (%struct.20i8, ptr @b, i64 0, i32 16), align 16173  store volatile i8 %i17, ptr @a, align 4174  %i18 = load i8, ptr getelementptr inbounds (%struct.20i8, ptr @b, i64 0, i32 17), align 1175  store volatile i8 %i18, ptr @a, align 4176  %i19 = load i8, ptr getelementptr inbounds (%struct.20i8, ptr @b, i64 0, i32 18), align 2177  store volatile i8 %i19, ptr @a, align 4178  ret void179}180