157 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 62; RUN: opt < %s -S | FileCheck %s3 4define void @store_unsignedptr(ptr %ptr) {5; CHECK-LABEL: define void @store_unsignedptr(6; CHECK-SAME: ptr [[PTR:%.*]]) {7; CHECK-NEXT: [[ENTRY:.*:]]8; CHECK-NEXT: store ptr null, ptr [[PTR]], align 8, !tbaa [[INTPTR_TBAA0:![0-9]+]]9; CHECK-NEXT: ret void10;11entry:12 store ptr null, ptr %ptr, align 8, !tbaa !013 ret void14}15 16define void @store_char(ptr %ptr) {17; CHECK-LABEL: define void @store_char(18; CHECK-SAME: ptr [[PTR:%.*]]) {19; CHECK-NEXT: [[ENTRY:.*:]]20; CHECK-NEXT: store i8 0, ptr [[PTR]], align 1, !tbaa [[CHAR_TBAA5:![0-9]+]]21; CHECK-NEXT: ret void22;23entry:24 store i8 0, ptr %ptr, align 1, !tbaa !525 ret void26}27 28define float @ptr_to_float(ptr %ptr) {29; CHECK-LABEL: define float @ptr_to_float(30; CHECK-SAME: ptr [[PTR:%.*]]) {31; CHECK-NEXT: [[ENTRY:.*:]]32; CHECK-NEXT: store float 0.000000e+00, ptr [[PTR]], align 4, !tbaa [[FLOAT_TBAA6:![0-9]+]]33; CHECK-NEXT: call void @opaque(ptr [[PTR]])34; CHECK-NEXT: [[VAL:%.*]] = load float, ptr [[PTR]], align 4, !tbaa [[FLOAT_TBAA6]]35; CHECK-NEXT: ret float [[VAL]]36;37entry:38 store float 0.000000e+00, ptr %ptr, align 4, !tbaa !639 call void @opaque(ptr %ptr)40 %val = load float, ptr %ptr, align 4, !tbaa !641 ret float %val42}43 44define i64 @ptr_to_longlong(ptr %ptr) {45; CHECK-LABEL: define i64 @ptr_to_longlong(46; CHECK-SAME: ptr [[PTR:%.*]]) {47; CHECK-NEXT: [[ENTRY:.*:]]48; CHECK-NEXT: [[VAL:%.*]] = load i64, ptr [[PTR]], align 8, !tbaa [[LONG_LONG_TBAA8:![0-9]+]]49; CHECK-NEXT: store i64 0, ptr [[PTR]], align 8, !tbaa [[LONG_LONG_TBAA8]]50; CHECK-NEXT: ret i64 [[VAL]]51;52entry:53 %val = load i64, ptr %ptr, align 8, !tbaa !854 store i64 0, ptr %ptr, align 8, !tbaa !855 ret i64 %val56}57 58; struct STRUCT1 {59; int x;60; int y;61; };62 63define void @store_struct1ptr(ptr %ptr) {64; CHECK-LABEL: define void @store_struct1ptr(65; CHECK-SAME: ptr [[PTR:%.*]]) {66; CHECK-NEXT: [[ENTRY:.*:]]67; CHECK-NEXT: store ptr null, ptr [[PTR]], align 8, !tbaa [[_ZTS7STRUCT1PTR_TBAA10:![0-9]+]]68; CHECK-NEXT: ret void69;70entry:71 ; *(struct STRUCT1 **)ptr = 0;72 store ptr null, ptr %ptr, align 8, !tbaa !1073 ret void74}75 76; struct STRUCT2 {77; struct STRUCT1 *s;78; };79 80define void @store_struct2(ptr %ptr) {81; CHECK-LABEL: define void @store_struct2(82; CHECK-SAME: ptr [[PTR:%.*]]) {83; CHECK-NEXT: [[ENTRY:.*:]]84; CHECK-NEXT: store ptr null, ptr [[PTR]], align 8, !tbaa [[_ZTS7STRUCT1PTR_TBAA12:![0-9]+]]85; CHECK-NEXT: ret void86;87entry:88 ; ptr->s = 0;89 store ptr null, ptr %ptr, align 8, !tbaa !1290 ret void91}92 93define double @access_matrix(ptr %ptr) {94; CHECK-LABEL: define double @access_matrix(95; CHECK-SAME: ptr [[PTR:%.*]]) {96; CHECK-NEXT: [[ENTRY:.*:]]97; CHECK-NEXT: [[ALLOCA_PTR:%.*]] = alloca ptr, align 898; CHECK-NEXT: store ptr [[PTR]], ptr [[ALLOCA_PTR]], align 8, !tbaa [[ANYPTR_TBAA14:![0-9]+]]99; CHECK-NEXT: [[PTR_IDX:%.*]] = load ptr, ptr [[ALLOCA_PTR]], align 8, !tbaa [[ANYPTR_TBAA14]]100; CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds ptr, ptr [[PTR_IDX]], i64 4101; CHECK-NEXT: [[PTR_IDX_1:%.*]] = load ptr, ptr [[ADD_PTR]], align 8, !tbaa [[ANYPTR_TBAA16:![0-9]+]]102; CHECK-NEXT: [[ADD_PTR1:%.*]] = getelementptr inbounds [6 x double], ptr [[PTR_IDX_1]], i64 6103; CHECK-NEXT: [[PTR_IDX_2:%.*]] = load <6 x double>, ptr [[ADD_PTR1]], align 8, !tbaa [[CHAR_TBAA5]]104; CHECK-NEXT: [[MATRIXEXT:%.*]] = extractelement <6 x double> [[PTR_IDX_2]], i64 5105; CHECK-NEXT: ret double [[MATRIXEXT]]106;107entry:108 %alloca.ptr = alloca ptr, align 8109 store ptr %ptr, ptr %alloca.ptr, align 8, !tbaa !14110 %ptr.idx = load ptr, ptr %alloca.ptr, align 8, !tbaa !14111 %add.ptr = getelementptr inbounds ptr, ptr %ptr.idx, i64 4112 %ptr.idx.1 = load ptr, ptr %add.ptr, align 8, !tbaa !16113 %add.ptr1 = getelementptr inbounds [6 x double], ptr %ptr.idx.1, i64 6114 %ptr.idx.2 = load <6 x double>, ptr %add.ptr1, align 8, !tbaa !5115 %matrixext = extractelement <6 x double> %ptr.idx.2, i64 5116 ret double %matrixext117}118 119declare void @opaque(ptr)120 121!0 = !{!1, !1, i64 0}122!1 = !{!"p1 int", !2, i64 0}123!2 = !{!"any pointer", !3, i64 0}124!3 = !{!"omnipotent char", !4, i64 0}125!4 = !{!"Simple C/C++ TBAA"}126!5 = !{!3, !3, i64 0}127!6 = !{!7, !7, i64 0}128!7 = !{!"float", !3, i64 0}129!8 = !{!9, !9, i64 0}130!9 = !{!"long long", !3, i64 0}131!10 = !{!11, !11, i64 0}132!11 = !{!"p1 _ZTS7STRUCT1", !2, i64 0}133!12 = !{!13, !11, i64 0}134!13 = !{!"STRUCT2", !11, i64 0}135!14 = !{!15, !15, i64 0}136!15 = !{!"any p2 pointer", !2, i64 0}137!16 = !{!2, !2, i64 0}138;.139; CHECK: [[INTPTR_TBAA0]] = !{[[META1:![0-9]+]], [[META1]], i64 0}140; CHECK: [[META1]] = !{!"p1 int", [[META2:![0-9]+]], i64 0}141; CHECK: [[META2]] = !{!"any pointer", [[META3:![0-9]+]], i64 0}142; CHECK: [[META3]] = !{!"omnipotent char", [[META4:![0-9]+]], i64 0}143; CHECK: [[META4]] = !{!"Simple C/C++ TBAA"}144; CHECK: [[CHAR_TBAA5]] = !{[[META3]], [[META3]], i64 0}145; CHECK: [[FLOAT_TBAA6]] = !{[[META7:![0-9]+]], [[META7]], i64 0}146; CHECK: [[META7]] = !{!"float", [[META3]], i64 0}147; CHECK: [[LONG_LONG_TBAA8]] = !{[[META9:![0-9]+]], [[META9]], i64 0}148; CHECK: [[META9]] = !{!"long long", [[META3]], i64 0}149; CHECK: [[_ZTS7STRUCT1PTR_TBAA10]] = !{[[META11:![0-9]+]], [[META11]], i64 0}150; CHECK: [[META11]] = !{!"p1 _ZTS7STRUCT1", [[META2]], i64 0}151; CHECK: [[_ZTS7STRUCT1PTR_TBAA12]] = !{[[META13:![0-9]+]], [[META11]], i64 0}152; CHECK: [[META13]] = !{!"STRUCT2", [[META11]], i64 0}153; CHECK: [[ANYPTR_TBAA14]] = !{[[META15:![0-9]+]], [[META15]], i64 0}154; CHECK: [[META15]] = !{!"any p2 pointer", [[META2]], i64 0}155; CHECK: [[ANYPTR_TBAA16]] = !{[[META2]], [[META2]], i64 0}156;.157