brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 89523b4 Raw
99 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -loop-reduce < %s | FileCheck %s3 4target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"5target triple = "x86_64-unknown-linux-gnu"6 7declare void @use(i8 zeroext)8declare void @use_p(ptr)9 10; nuw needs to be dropped when switching to post-inc comparison.11define i8 @drop_nuw() {12; CHECK-LABEL: @drop_nuw(13; CHECK-NEXT:  entry:14; CHECK-NEXT:    br label [[LOOP:%.*]]15; CHECK:       loop:16; CHECK-NEXT:    [[IV:%.*]] = phi i8 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]17; CHECK-NEXT:    call void @use(i8 zeroext [[IV]])18; CHECK-NEXT:    [[IV_NEXT]] = add i8 [[IV]], 119; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i8 [[IV_NEXT]], 020; CHECK-NEXT:    br i1 [[CMP]], label [[EXIT:%.*]], label [[LOOP]]21; CHECK:       exit:22; CHECK-NEXT:    [[TMP0:%.*]] = add i8 [[IV_NEXT]], -123; CHECK-NEXT:    ret i8 [[TMP0]]24;25entry:26  br label %loop27 28loop:29  %iv = phi i8 [ 0, %entry ], [ %iv.next, %loop ]30  call void @use(i8 zeroext %iv)31 32  %iv.next = add nuw i8 %iv, 133  %cmp = icmp eq i8 %iv, -134  br i1 %cmp, label %exit, label %loop35 36exit:37  ret i8 %iv38}39 40; nsw needs to be dropped when switching to post-inc comparison.41define i8 @drop_nsw() {42; CHECK-LABEL: @drop_nsw(43; CHECK-NEXT:  entry:44; CHECK-NEXT:    br label [[LOOP:%.*]]45; CHECK:       loop:46; CHECK-NEXT:    [[IV:%.*]] = phi i8 [ 127, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]47; CHECK-NEXT:    call void @use(i8 zeroext [[IV]])48; CHECK-NEXT:    [[IV_NEXT]] = add i8 [[IV]], -149; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i8 [[IV_NEXT]], 12750; CHECK-NEXT:    br i1 [[CMP]], label [[EXIT:%.*]], label [[LOOP]]51; CHECK:       exit:52; CHECK-NEXT:    [[TMP0:%.*]] = add i8 [[IV_NEXT]], 153; CHECK-NEXT:    ret i8 [[TMP0]]54;55entry:56  br label %loop57 58loop:59  %iv = phi i8 [ 127, %entry ], [ %iv.next, %loop ]60  call void @use(i8 zeroext %iv)61 62  %iv.next = add nsw i8 %iv, -163  %cmp = icmp eq i8 %iv, -12864  br i1 %cmp, label %exit, label %loop65 66exit:67  ret i8 %iv68}69 70; Comparison already in post-inc form, no need to drop nuw.71define i8 @already_postinc() {72; CHECK-LABEL: @already_postinc(73; CHECK-NEXT:  entry:74; CHECK-NEXT:    br label [[LOOP:%.*]]75; CHECK:       loop:76; CHECK-NEXT:    [[IV:%.*]] = phi i8 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]77; CHECK-NEXT:    call void @use(i8 zeroext [[IV]])78; CHECK-NEXT:    [[IV_NEXT]] = add nuw i8 [[IV]], 179; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i8 [[IV_NEXT]], -180; CHECK-NEXT:    br i1 [[CMP]], label [[EXIT:%.*]], label [[LOOP]]81; CHECK:       exit:82; CHECK-NEXT:    [[TMP0:%.*]] = add i8 [[IV_NEXT]], -183; CHECK-NEXT:    ret i8 [[TMP0]]84;85entry:86  br label %loop87 88loop:89  %iv = phi i8 [ 0, %entry ], [ %iv.next, %loop ]90  call void @use(i8 zeroext %iv)91 92  %iv.next = add nuw i8 %iv, 193  %cmp = icmp eq i8 %iv.next, -194  br i1 %cmp, label %exit, label %loop95 96exit:97  ret i8 %iv98}99