brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.8 KiB · 15ff67b Raw
134 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=dse %s -S | FileCheck --check-prefixes=CHECK %s3 4 5%struct.ham = type { [3 x double], [3 x double]}6 7declare void @may_throw()8declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg)9 10; We miss this case, because of an aggressive limit of partial overlap analysis.11; With a larger partial store limit, we remove the memset.12define void @overlap1(ptr %arg, i1 %cond) {13; CHECK-LABEL: @overlap1(14; CHECK-NEXT:  bb:15; CHECK-NEXT:    [[TMP:%.*]] = getelementptr inbounds [[STRUCT_HAM:%.*]], ptr [[ARG:%.*]], i64 0, i32 0, i64 216; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [[STRUCT_HAM]], ptr [[ARG]], i64 0, i32 0, i64 117; CHECK-NEXT:    [[TMP3:%.*]] = getelementptr inbounds [[STRUCT_HAM]], ptr [[ARG]], i64 0, i32 1, i64 218; CHECK-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [[STRUCT_HAM]], ptr [[ARG]], i64 0, i32 1, i64 119; CHECK-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [[STRUCT_HAM]], ptr [[ARG]], i64 0, i32 1, i32 020; CHECK-NEXT:    br i1 [[COND:%.*]], label [[BB7:%.*]], label [[BB8:%.*]]21; CHECK:       bb7:22; CHECK-NEXT:    br label [[BB9:%.*]]23; CHECK:       bb8:24; CHECK-NEXT:    br label [[BB9]]25; CHECK:       bb9:26; CHECK-NEXT:    store double 1.000000e+00, ptr [[ARG]], align 827; CHECK-NEXT:    store double 2.000000e+00, ptr [[TMP1]], align 828; CHECK-NEXT:    store double 3.000000e+00, ptr [[TMP]], align 829; CHECK-NEXT:    store double 4.000000e+00, ptr [[TMP5]], align 830; CHECK-NEXT:    store double 5.000000e+00, ptr [[TMP4]], align 831; CHECK-NEXT:    store double 6.000000e+00, ptr [[TMP3]], align 832; CHECK-NEXT:    ret void33;34bb:35  %tmp = getelementptr inbounds %struct.ham, ptr %arg, i64 0, i32 0, i64 236  %tmp1 = getelementptr inbounds %struct.ham, ptr %arg, i64 0, i32 0, i64 137  %tmp3 = getelementptr inbounds %struct.ham, ptr %arg, i64 0,i32 1, i64 238  %tmp4 = getelementptr inbounds %struct.ham, ptr %arg, i64 0, i32 1, i64 139  %tmp5 = getelementptr inbounds %struct.ham, ptr %arg, i64 0, i32 1, i32 040  call void @llvm.memset.p0.i64(ptr nonnull align 8 dereferenceable(48) %arg, i8 0, i64 48, i1 false)41  br i1 %cond, label %bb7, label %bb842 43bb7:                                              ; preds = %bb44  br label %bb945 46bb8:                                              ; preds = %bb47  br label %bb948 49bb9:                                              ; preds = %bb8, %bb750  store double 1.0, ptr %arg, align 851  store double 2.0, ptr %tmp1, align 852  store double 3.0, ptr %tmp, align 853  store double 4.0, ptr %tmp5, align 854  store double 5.0, ptr %tmp4, align 855  store double 6.0, ptr %tmp3, align 856  ret void57}58 59define void @overlap2(ptr %arg, i1 %cond) {60; CHECK-LABEL: @overlap2(61; CHECK-NEXT:  bb:62; CHECK-NEXT:    [[TMP:%.*]] = getelementptr inbounds [[STRUCT_HAM:%.*]], ptr [[ARG:%.*]], i64 0, i32 0, i64 263; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [[STRUCT_HAM]], ptr [[ARG]], i64 0, i32 0, i64 164; CHECK-NEXT:    [[TMP3:%.*]] = getelementptr inbounds [[STRUCT_HAM]], ptr [[ARG]], i64 0, i32 1, i64 265; CHECK-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [[STRUCT_HAM]], ptr [[ARG]], i64 0, i32 1, i64 166; CHECK-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [[STRUCT_HAM]], ptr [[ARG]], i64 0, i32 1, i32 067; CHECK-NEXT:    call void @llvm.memset.p0.i64(ptr nonnull align 8 dereferenceable(48) [[ARG]], i8 0, i64 48, i1 false)68; CHECK-NEXT:    br i1 [[COND:%.*]], label [[BB7:%.*]], label [[BB8:%.*]]69; CHECK:       bb7:70; CHECK-NEXT:    call void @may_throw()71; CHECK-NEXT:    br label [[BB9:%.*]]72; CHECK:       bb8:73; CHECK-NEXT:    br label [[BB9]]74; CHECK:       bb9:75; CHECK-NEXT:    store double 1.000000e+00, ptr [[ARG]], align 876; CHECK-NEXT:    store double 2.000000e+00, ptr [[TMP1]], align 877; CHECK-NEXT:    store double 3.000000e+00, ptr [[TMP]], align 878; CHECK-NEXT:    store double 4.000000e+00, ptr [[TMP5]], align 879; CHECK-NEXT:    store double 5.000000e+00, ptr [[TMP4]], align 880; CHECK-NEXT:    store double 6.000000e+00, ptr [[TMP3]], align 881; CHECK-NEXT:    ret void82;83bb:84  %tmp = getelementptr inbounds %struct.ham, ptr %arg, i64 0, i32 0, i64 285  %tmp1 = getelementptr inbounds %struct.ham, ptr %arg, i64 0, i32 0, i64 186  %tmp3 = getelementptr inbounds %struct.ham, ptr %arg, i64 0,i32 1, i64 287  %tmp4 = getelementptr inbounds %struct.ham, ptr %arg, i64 0, i32 1, i64 188  %tmp5 = getelementptr inbounds %struct.ham, ptr %arg, i64 0, i32 1, i32 089  call void @llvm.memset.p0.i64(ptr nonnull align 8 dereferenceable(48) %arg, i8 0, i64 48, i1 false)90  br i1 %cond, label %bb7, label %bb891 92bb7:                                              ; preds = %bb93  call void @may_throw()94  br label %bb995 96bb8:                                              ; preds = %bb97  br label %bb998 99bb9:                                              ; preds = %bb8, %bb7100  store double 1.0, ptr %arg, align 8101  store double 2.0, ptr %tmp1, align 8102  store double 3.0, ptr %tmp, align 8103  store double 4.0, ptr %tmp5, align 8104  store double 5.0, ptr %tmp4, align 8105  store double 6.0, ptr %tmp3, align 8106  ret void107}108 109; Test case from PR46513. Make sure we do not crash.110; TODO: we should be able to shorten store i32 844283136, ptr %cast.i32 to a111; store of i16.112define void @overlap_no_dominance(ptr %arg, i1 %c)  {113; CHECK-LABEL: @overlap_no_dominance(114; CHECK-NEXT:  bb:115; CHECK-NEXT:    br i1 [[C:%.*]], label [[BB13:%.*]], label [[BB9:%.*]]116; CHECK:       bb9:117; CHECK-NEXT:    store i32 844283136, ptr [[ARG:%.*]], align 4118; CHECK-NEXT:    br label [[BB13]]119; CHECK:       bb13:120; CHECK-NEXT:    store i16 0, ptr [[ARG]], align 4121; CHECK-NEXT:    ret void122;123bb:124  br i1 %c, label %bb13, label %bb9125 126bb9:                                              ; preds = %bb127  store i32 844283136, ptr %arg, align 4128  br label %bb13129 130bb13:                                             ; preds = %bb9, %bb131  store i16 0, ptr %arg, align 4132  ret void133}134