brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.9 KiB · 43f6cf7 Raw
107 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -O2 -S -mtriple=x86_64-- -mattr=+sse2 < %s | FileCheck %s3; RUN: opt -O2 -S -mtriple=x86_64-- -mattr=+avx2 < %s | FileCheck %s4 5; PR38280 / Issue #376286define void @apply_delta(ptr nocapture noundef %dst, ptr nocapture noundef readonly %src, i64 noundef %neg_offs, i64 noundef %count) {7; CHECK-LABEL: @apply_delta(8; CHECK-NEXT:  entry:9; CHECK-NEXT:    [[CMP21:%.*]] = icmp ugt i64 [[COUNT:%.*]], 710; CHECK-NEXT:    br i1 [[CMP21]], label [[WHILE_BODY:%.*]], label [[WHILE_COND3_PREHEADER:%.*]]11; CHECK:       while.cond3.preheader:12; CHECK-NEXT:    [[COUNT_ADDR_0_LCSSA:%.*]] = phi i64 [ [[COUNT]], [[ENTRY:%.*]] ], [ [[SUB:%.*]], [[WHILE_BODY]] ]13; CHECK-NEXT:    [[SRC_ADDR_0_LCSSA:%.*]] = phi ptr [ [[SRC:%.*]], [[ENTRY]] ], [ [[ADD_PTR2:%.*]], [[WHILE_BODY]] ]14; CHECK-NEXT:    [[DST_ADDR_0_LCSSA:%.*]] = phi ptr [ [[DST:%.*]], [[ENTRY]] ], [ [[ADD_PTR1:%.*]], [[WHILE_BODY]] ]15; CHECK-NEXT:    [[TOBOOL_NOT27:%.*]] = icmp eq i64 [[COUNT_ADDR_0_LCSSA]], 016; CHECK-NEXT:    br i1 [[TOBOOL_NOT27]], label [[WHILE_END9:%.*]], label [[WHILE_BODY4:%.*]]17; CHECK:       while.body:18; CHECK-NEXT:    [[DST_ADDR_024:%.*]] = phi ptr [ [[ADD_PTR1]], [[WHILE_BODY]] ], [ [[DST]], [[ENTRY]] ]19; CHECK-NEXT:    [[SRC_ADDR_023:%.*]] = phi ptr [ [[ADD_PTR2]], [[WHILE_BODY]] ], [ [[SRC]], [[ENTRY]] ]20; CHECK-NEXT:    [[COUNT_ADDR_022:%.*]] = phi i64 [ [[SUB]], [[WHILE_BODY]] ], [ [[COUNT]], [[ENTRY]] ]21; CHECK-NEXT:    [[TMP0:%.*]] = load <8 x i8>, ptr [[SRC_ADDR_023]], align 122; CHECK-NEXT:    [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[DST_ADDR_024]], i64 [[NEG_OFFS:%.*]]23; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr [[ADD_PTR]], align 124; CHECK-NEXT:    [[ADD:%.*]] = add <8 x i8> [[TMP1]], [[TMP0]]25; CHECK-NEXT:    store <8 x i8> [[ADD]], ptr [[DST_ADDR_024]], align 126; CHECK-NEXT:    [[ADD_PTR1]] = getelementptr inbounds nuw i8, ptr [[DST_ADDR_024]], i64 827; CHECK-NEXT:    [[ADD_PTR2]] = getelementptr inbounds nuw i8, ptr [[SRC_ADDR_023]], i64 828; CHECK-NEXT:    [[SUB]] = add i64 [[COUNT_ADDR_022]], -829; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i64 [[SUB]], 730; CHECK-NEXT:    br i1 [[CMP]], label [[WHILE_BODY]], label [[WHILE_COND3_PREHEADER]]31; CHECK:       while.body4:32; CHECK-NEXT:    [[DST_ADDR_130:%.*]] = phi ptr [ [[INCDEC_PTR:%.*]], [[WHILE_BODY4]] ], [ [[DST_ADDR_0_LCSSA]], [[WHILE_COND3_PREHEADER]] ]33; CHECK-NEXT:    [[SRC_ADDR_129:%.*]] = phi ptr [ [[INCDEC_PTR8:%.*]], [[WHILE_BODY4]] ], [ [[SRC_ADDR_0_LCSSA]], [[WHILE_COND3_PREHEADER]] ]34; CHECK-NEXT:    [[COUNT_ADDR_128:%.*]] = phi i64 [ [[DEC:%.*]], [[WHILE_BODY4]] ], [ [[COUNT_ADDR_0_LCSSA]], [[WHILE_COND3_PREHEADER]] ]35; CHECK-NEXT:    [[DEC]] = add i64 [[COUNT_ADDR_128]], -136; CHECK-NEXT:    [[TMP2:%.*]] = load i8, ptr [[SRC_ADDR_129]], align 137; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[DST_ADDR_130]], i64 [[NEG_OFFS]]38; CHECK-NEXT:    [[TMP3:%.*]] = load i8, ptr [[ARRAYIDX]], align 139; CHECK-NEXT:    [[ADD6:%.*]] = add i8 [[TMP3]], [[TMP2]]40; CHECK-NEXT:    store i8 [[ADD6]], ptr [[DST_ADDR_130]], align 141; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds nuw i8, ptr [[DST_ADDR_130]], i64 142; CHECK-NEXT:    [[INCDEC_PTR8]] = getelementptr inbounds nuw i8, ptr [[SRC_ADDR_129]], i64 143; CHECK-NEXT:    [[TOBOOL_NOT:%.*]] = icmp eq i64 [[DEC]], 044; CHECK-NEXT:    br i1 [[TOBOOL_NOT]], label [[WHILE_END9]], label [[WHILE_BODY4]]45; CHECK:       while.end9:46; CHECK-NEXT:    ret void47;48entry:49  %cmp21 = icmp ugt i64 %count, 750  br i1 %cmp21, label %while.body.preheader, label %while.cond3.preheader51 52while.body.preheader:53  br label %while.body54 55while.cond3.preheader.loopexit:56  %add.ptr1.lcssa = phi ptr [ %add.ptr1, %while.body ]57  %add.ptr2.lcssa = phi ptr [ %add.ptr2, %while.body ]58  %sub.lcssa = phi i64 [ %sub, %while.body ]59  br label %while.cond3.preheader60 61while.cond3.preheader:62  %count.addr.0.lcssa = phi i64 [ %count, %entry ], [ %sub.lcssa, %while.cond3.preheader.loopexit ]63  %src.addr.0.lcssa = phi ptr [ %src, %entry ], [ %add.ptr2.lcssa, %while.cond3.preheader.loopexit ]64  %dst.addr.0.lcssa = phi ptr [ %dst, %entry ], [ %add.ptr1.lcssa, %while.cond3.preheader.loopexit ]65  %tobool.not27 = icmp eq i64 %count.addr.0.lcssa, 066  br i1 %tobool.not27, label %while.end9, label %while.body4.preheader67 68while.body4.preheader:69  br label %while.body470 71while.body:72  %dst.addr.024 = phi ptr [ %add.ptr1, %while.body ], [ %dst, %while.body.preheader ]73  %src.addr.023 = phi ptr [ %add.ptr2, %while.body ], [ %src, %while.body.preheader ]74  %count.addr.022 = phi i64 [ %sub, %while.body ], [ %count, %while.body.preheader ]75  %0 = load <8 x i8>, ptr %src.addr.023, align 176  %add.ptr = getelementptr inbounds i8, ptr %dst.addr.024, i64 %neg_offs77  %1 = load <8 x i8>, ptr %add.ptr, align 178  %add = add <8 x i8> %1, %079  store <8 x i8> %add, ptr %dst.addr.024, align 180  %add.ptr1 = getelementptr inbounds i8, ptr %dst.addr.024, i64 881  %add.ptr2 = getelementptr inbounds i8, ptr %src.addr.023, i64 882  %sub = add i64 %count.addr.022, -883  %cmp = icmp ugt i64 %sub, 784  br i1 %cmp, label %while.body, label %while.cond3.preheader.loopexit85 86while.body4:87  %dst.addr.130 = phi ptr [ %incdec.ptr, %while.body4 ], [ %dst.addr.0.lcssa, %while.body4.preheader ]88  %src.addr.129 = phi ptr [ %incdec.ptr8, %while.body4 ], [ %src.addr.0.lcssa, %while.body4.preheader ]89  %count.addr.128 = phi i64 [ %dec, %while.body4 ], [ %count.addr.0.lcssa, %while.body4.preheader ]90  %dec = add i64 %count.addr.128, -191  %2 = load i8, ptr %src.addr.129, align 192  %arrayidx = getelementptr inbounds i8, ptr %dst.addr.130, i64 %neg_offs93  %3 = load i8, ptr %arrayidx, align 194  %add6 = add i8 %3, %295  store i8 %add6, ptr %dst.addr.130, align 196  %incdec.ptr = getelementptr inbounds i8, ptr %dst.addr.130, i64 197  %incdec.ptr8 = getelementptr inbounds i8, ptr %src.addr.129, i64 198  %tobool.not = icmp eq i64 %dec, 099  br i1 %tobool.not, label %while.end9.loopexit, label %while.body4100 101while.end9.loopexit:102  br label %while.end9103 104while.end9:105  ret void106}107