153 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=dse -S | FileCheck %s3 4target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"5 6define void @second_store_smaller_1(ptr noalias %P, i1 %c) {7; CHECK-LABEL: @second_store_smaller_1(8; CHECK-NEXT: store i32 0, ptr [[P:%.*]], align 49; CHECK-NEXT: br i1 [[C:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]10; CHECK: bb1:11; CHECK-NEXT: br label [[BB3:%.*]]12; CHECK: bb2:13; CHECK-NEXT: br label [[BB3]]14; CHECK: bb3:15; CHECK-NEXT: ret void16;17 store i32 1, ptr %P18 br i1 %c, label %bb1, label %bb219bb1:20 br label %bb321bb2:22 br label %bb323bb3:24 store i16 0, ptr %P25 ret void26}27 28define void @second_store_smaller_2(ptr noalias %P, i1 %c) {29; CHECK-LABEL: @second_store_smaller_2(30; CHECK-NEXT: store i32 12345, ptr [[P:%.*]], align 431; CHECK-NEXT: br i1 [[C:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]32; CHECK: bb1:33; CHECK-NEXT: br label [[BB3:%.*]]34; CHECK: bb2:35; CHECK-NEXT: br label [[BB3]]36; CHECK: bb3:37; CHECK-NEXT: ret void38;39 store i32 1, ptr %P40 br i1 %c, label %bb1, label %bb241bb1:42 br label %bb343bb2:44 br label %bb345bb3:46 store i16 12345, ptr %P47 ret void48}49 50declare void @use(i16) readnone51declare void @use.i8(i8) readnone52 53define void @second_store_smaller_3(ptr noalias %P, i1 %c) {54; CHECK-LABEL: @second_store_smaller_3(55; CHECK-NEXT: store i32 1, ptr [[P:%.*]], align 456; CHECK-NEXT: br i1 [[C:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]57; CHECK: bb1:58; CHECK-NEXT: [[L1:%.*]] = load i16, ptr [[P]], align 259; CHECK-NEXT: call void @use(i16 [[L1]])60; CHECK-NEXT: br label [[BB3:%.*]]61; CHECK: bb2:62; CHECK-NEXT: br label [[BB3]]63; CHECK: bb3:64; CHECK-NEXT: store i16 -31073, ptr [[P]], align 265; CHECK-NEXT: ret void66;67 store i32 1, ptr %P68 br i1 %c, label %bb1, label %bb269 70bb1:71 %l1 = load i16, ptr %P72 call void @use(i16 %l1)73 br label %bb374bb2:75 br label %bb376bb3:77 store i16 -31073, ptr %P78 ret void79}80 81define void @second_store_smaller_4(ptr noalias %P, i1 %c) {82; CHECK-LABEL: @second_store_smaller_4(83; CHECK-NEXT: store i32 1, ptr [[P:%.*]], align 484; CHECK-NEXT: br i1 [[C:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]85; CHECK: bb1:86; CHECK-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 187; CHECK-NEXT: call void @use.i8(i8 [[L1]])88; CHECK-NEXT: br label [[BB3:%.*]]89; CHECK: bb2:90; CHECK-NEXT: br label [[BB3]]91; CHECK: bb3:92; CHECK-NEXT: store i16 -31073, ptr [[P]], align 293; CHECK-NEXT: ret void94;95 store i32 1, ptr %P96 br i1 %c, label %bb1, label %bb297 98bb1:99 %l1 = load i8, ptr %P100 call void @use.i8(i8 %l1)101 br label %bb3102bb2:103 br label %bb3104bb3:105 store i16 -31073, ptr %P106 ret void107}108 109define void @second_store_smaller_5(ptr noalias %P, i16 %x, i1 %c) {110; CHECK-LABEL: @second_store_smaller_5(111; CHECK-NEXT: store i32 1, ptr [[P:%.*]], align 4112; CHECK-NEXT: br i1 [[C:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]113; CHECK: bb1:114; CHECK-NEXT: br label [[BB3:%.*]]115; CHECK: bb2:116; CHECK-NEXT: br label [[BB3]]117; CHECK: bb3:118; CHECK-NEXT: store i16 [[X:%.*]], ptr [[P]], align 2119; CHECK-NEXT: ret void120;121 store i32 1, ptr %P122 br i1 %c, label %bb1, label %bb2123bb1:124 br label %bb3125bb2:126 br label %bb3127bb3:128 store i16 %x, ptr %P129 ret void130}131 132define void @second_store_bigger(ptr noalias %P, i1 %c) {133; CHECK-LABEL: @second_store_bigger(134; CHECK-NEXT: br i1 [[C:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]135; CHECK: bb1:136; CHECK-NEXT: br label [[BB3:%.*]]137; CHECK: bb2:138; CHECK-NEXT: br label [[BB3]]139; CHECK: bb3:140; CHECK-NEXT: store i64 0, ptr [[P:%.*]], align 8141; CHECK-NEXT: ret void142;143 store i32 1, ptr %P144 br i1 %c, label %bb1, label %bb2145bb1:146 br label %bb3147bb2:148 br label %bb3149bb3:150 store i64 0, ptr %P151 ret void152}153