brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.2 KiB · a6bff26 Raw
165 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -mtriple=thumbv7em -arm-parallel-dsp -dce -S %s -o - | FileCheck %s3 4define void @full_unroll(ptr noalias nocapture %a, ptr noalias nocapture readonly %b, ptr noalias nocapture readonly %c, i32 %N) {5; CHECK-LABEL: @full_unroll(6; CHECK-NEXT:  entry:7; CHECK-NEXT:    [[CMP29:%.*]] = icmp eq i32 [[N:%.*]], 08; CHECK-NEXT:    br i1 [[CMP29]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY:%.*]]9; CHECK:       for.cond.cleanup:10; CHECK-NEXT:    ret void11; CHECK:       for.body:12; CHECK-NEXT:    [[I_030:%.*]] = phi i32 [ [[INC12:%.*]], [[FOR_BODY]] ], [ 0, [[ENTRY:%.*]] ]13; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i32 [[I_030]]14; CHECK-NEXT:    [[ARRAYIDX5:%.*]] = getelementptr inbounds ptr, ptr [[B:%.*]], i32 [[I_030]]15; CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[ARRAYIDX5]], align 416; CHECK-NEXT:    [[ARRAYIDX7:%.*]] = getelementptr inbounds ptr, ptr [[C:%.*]], i32 [[I_030]]17; CHECK-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[ARRAYIDX7]], align 418; CHECK-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP0]], align 219; CHECK-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP1]], align 220; CHECK-NEXT:    [[TMP6:%.*]] = call i32 @llvm.arm.smlad(i32 [[TMP5]], i32 [[TMP3]], i32 0)21; CHECK-NEXT:    [[ARRAYIDX6_2:%.*]] = getelementptr inbounds i16, ptr [[TMP0]], i32 222; CHECK-NEXT:    [[TMP8:%.*]] = load i32, ptr [[ARRAYIDX6_2]], align 223; CHECK-NEXT:    [[ARRAYIDX8_2:%.*]] = getelementptr inbounds i16, ptr [[TMP1]], i32 224; CHECK-NEXT:    [[TMP10:%.*]] = load i32, ptr [[ARRAYIDX8_2]], align 225; CHECK-NEXT:    [[TMP11:%.*]] = call i32 @llvm.arm.smlad(i32 [[TMP10]], i32 [[TMP8]], i32 [[TMP6]])26; CHECK-NEXT:    store i32 [[TMP11]], ptr [[ARRAYIDX]], align 427; CHECK-NEXT:    [[INC12]] = add nuw i32 [[I_030]], 128; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp eq i32 [[INC12]], [[N]]29; CHECK-NEXT:    br i1 [[EXITCOND]], label [[FOR_COND_CLEANUP]], label [[FOR_BODY]]30;31entry:32  %cmp29 = icmp eq i32 %N, 033  br i1 %cmp29, label %for.cond.cleanup, label %for.body34 35for.cond.cleanup:                                 ; preds = %for.body, %entry36  ret void37 38for.body:                                         ; preds = %entry, %for.body39  %i.030 = phi i32 [ %inc12, %for.body ], [ 0, %entry ]40  %arrayidx = getelementptr inbounds i32, ptr %a, i32 %i.03041  %arrayidx5 = getelementptr inbounds ptr, ptr %b, i32 %i.03042  %0 = load ptr, ptr %arrayidx5, align 443  %arrayidx7 = getelementptr inbounds ptr, ptr %c, i32 %i.03044  %1 = load ptr, ptr %arrayidx7, align 445  %2 = load i16, ptr %0, align 246  %conv = sext i16 %2 to i3247  %3 = load i16, ptr %1, align 248  %conv9 = sext i16 %3 to i3249  %mul = mul nsw i32 %conv9, %conv50  %arrayidx6.1 = getelementptr inbounds i16, ptr %0, i32 151  %4 = load i16, ptr %arrayidx6.1, align 252  %conv.1 = sext i16 %4 to i3253  %arrayidx8.1 = getelementptr inbounds i16, ptr %1, i32 154  %5 = load i16, ptr %arrayidx8.1, align 255  %conv9.1 = sext i16 %5 to i3256  %mul.1 = mul nsw i32 %conv9.1, %conv.157  %add.1 = add nsw i32 %mul.1, %mul58  %arrayidx6.2 = getelementptr inbounds i16, ptr %0, i32 259  %6 = load i16, ptr %arrayidx6.2, align 260  %conv.2 = sext i16 %6 to i3261  %arrayidx8.2 = getelementptr inbounds i16, ptr %1, i32 262  %7 = load i16, ptr %arrayidx8.2, align 263  %conv9.2 = sext i16 %7 to i3264  %mul.2 = mul nsw i32 %conv9.2, %conv.265  %add.2 = add nsw i32 %mul.2, %add.166  %arrayidx6.3 = getelementptr inbounds i16, ptr %0, i32 367  %8 = load i16, ptr %arrayidx6.3, align 268  %conv.3 = sext i16 %8 to i3269  %arrayidx8.3 = getelementptr inbounds i16, ptr %1, i32 370  %9 = load i16, ptr %arrayidx8.3, align 271  %conv9.3 = sext i16 %9 to i3272  %mul.3 = mul nsw i32 %conv9.3, %conv.373  %add.3 = add nsw i32 %mul.3, %add.274  store i32 %add.3, ptr %arrayidx, align 475  %inc12 = add nuw i32 %i.030, 176  %exitcond = icmp eq i32 %inc12, %N77  br i1 %exitcond, label %for.cond.cleanup, label %for.body78}79 80define void @full_unroll_sub(ptr noalias nocapture %a, ptr noalias nocapture readonly %b, ptr noalias nocapture readonly %c, i32 %N) {81; CHECK-LABEL: @full_unroll_sub(82; CHECK-NEXT:  entry:83; CHECK-NEXT:    [[CMP29:%.*]] = icmp eq i32 [[N:%.*]], 084; CHECK-NEXT:    br i1 [[CMP29]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY:%.*]]85; CHECK:       for.cond.cleanup:86; CHECK-NEXT:    ret void87; CHECK:       for.body:88; CHECK-NEXT:    [[I_030:%.*]] = phi i32 [ [[INC12:%.*]], [[FOR_BODY]] ], [ 0, [[ENTRY:%.*]] ]89; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i32 [[I_030]]90; CHECK-NEXT:    [[ARRAYIDX5:%.*]] = getelementptr inbounds ptr, ptr [[B:%.*]], i32 [[I_030]]91; CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[ARRAYIDX5]], align 492; CHECK-NEXT:    [[ARRAYIDX7:%.*]] = getelementptr inbounds ptr, ptr [[C:%.*]], i32 [[I_030]]93; CHECK-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[ARRAYIDX7]], align 494; CHECK-NEXT:    [[TMP2:%.*]] = load i16, ptr [[TMP0]], align 295; CHECK-NEXT:    [[CONV:%.*]] = sext i16 [[TMP2]] to i3296; CHECK-NEXT:    [[TMP3:%.*]] = load i16, ptr [[TMP1]], align 297; CHECK-NEXT:    [[CONV9:%.*]] = sext i16 [[TMP3]] to i3298; CHECK-NEXT:    [[SUB:%.*]] = sub nsw i32 [[CONV9]], [[CONV]]99; CHECK-NEXT:    [[ARRAYIDX6_1:%.*]] = getelementptr inbounds i16, ptr [[TMP0]], i32 1100; CHECK-NEXT:    [[TMP4:%.*]] = load i16, ptr [[ARRAYIDX6_1]], align 2101; CHECK-NEXT:    [[CONV_1:%.*]] = sext i16 [[TMP4]] to i32102; CHECK-NEXT:    [[ARRAYIDX8_1:%.*]] = getelementptr inbounds i16, ptr [[TMP1]], i32 1103; CHECK-NEXT:    [[TMP5:%.*]] = load i16, ptr [[ARRAYIDX8_1]], align 2104; CHECK-NEXT:    [[CONV9_1:%.*]] = sext i16 [[TMP5]] to i32105; CHECK-NEXT:    [[MUL_1:%.*]] = mul nsw i32 [[CONV9_1]], [[CONV_1]]106; CHECK-NEXT:    [[ADD_1:%.*]] = add nsw i32 [[MUL_1]], [[SUB]]107; CHECK-NEXT:    [[ARRAYIDX6_2:%.*]] = getelementptr inbounds i16, ptr [[TMP0]], i32 2108; CHECK-NEXT:    [[TMP7:%.*]] = load i32, ptr [[ARRAYIDX6_2]], align 2109; CHECK-NEXT:    [[ARRAYIDX8_2:%.*]] = getelementptr inbounds i16, ptr [[TMP1]], i32 2110; CHECK-NEXT:    [[TMP9:%.*]] = load i32, ptr [[ARRAYIDX8_2]], align 2111; CHECK-NEXT:    [[TMP10:%.*]] = call i32 @llvm.arm.smlad(i32 [[TMP9]], i32 [[TMP7]], i32 [[ADD_1]])112; CHECK-NEXT:    store i32 [[TMP10]], ptr [[ARRAYIDX]], align 4113; CHECK-NEXT:    [[INC12]] = add nuw i32 [[I_030]], 1114; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp eq i32 [[INC12]], [[N]]115; CHECK-NEXT:    br i1 [[EXITCOND]], label [[FOR_COND_CLEANUP]], label [[FOR_BODY]]116;117entry:118  %cmp29 = icmp eq i32 %N, 0119  br i1 %cmp29, label %for.cond.cleanup, label %for.body120 121for.cond.cleanup:                                 ; preds = %for.body, %entry122  ret void123 124for.body:                                         ; preds = %entry, %for.body125  %i.030 = phi i32 [ %inc12, %for.body ], [ 0, %entry ]126  %arrayidx = getelementptr inbounds i32, ptr %a, i32 %i.030127  %arrayidx5 = getelementptr inbounds ptr, ptr %b, i32 %i.030128  %0 = load ptr, ptr %arrayidx5, align 4129  %arrayidx7 = getelementptr inbounds ptr, ptr %c, i32 %i.030130  %1 = load ptr, ptr %arrayidx7, align 4131  %2 = load i16, ptr %0, align 2132  %conv = sext i16 %2 to i32133  %3 = load i16, ptr %1, align 2134  %conv9 = sext i16 %3 to i32135  %sub = sub nsw i32 %conv9, %conv136  %arrayidx6.1 = getelementptr inbounds i16, ptr %0, i32 1137  %4 = load i16, ptr %arrayidx6.1, align 2138  %conv.1 = sext i16 %4 to i32139  %arrayidx8.1 = getelementptr inbounds i16, ptr %1, i32 1140  %5 = load i16, ptr %arrayidx8.1, align 2141  %conv9.1 = sext i16 %5 to i32142  %mul.1 = mul nsw i32 %conv9.1, %conv.1143  %add.1 = add nsw i32 %mul.1, %sub144  %arrayidx6.2 = getelementptr inbounds i16, ptr %0, i32 2145  %6 = load i16, ptr %arrayidx6.2, align 2146  %conv.2 = sext i16 %6 to i32147  %arrayidx8.2 = getelementptr inbounds i16, ptr %1, i32 2148  %7 = load i16, ptr %arrayidx8.2, align 2149  %conv9.2 = sext i16 %7 to i32150  %mul.2 = mul nsw i32 %conv9.2, %conv.2151  %add.2 = add nsw i32 %mul.2, %add.1152  %arrayidx6.3 = getelementptr inbounds i16, ptr %0, i32 3153  %8 = load i16, ptr %arrayidx6.3, align 2154  %conv.3 = sext i16 %8 to i32155  %arrayidx8.3 = getelementptr inbounds i16, ptr %1, i32 3156  %9 = load i16, ptr %arrayidx8.3, align 2157  %conv9.3 = sext i16 %9 to i32158  %mul.3 = mul nsw i32 %conv9.3, %conv.3159  %add.3 = add nsw i32 %mul.3, %add.2160  store i32 %add.3, ptr %arrayidx, align 4161  %inc12 = add nuw i32 %i.030, 1162  %exitcond = icmp eq i32 %inc12, %N163  br i1 %exitcond, label %for.cond.cleanup, label %for.body164}165