brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.4 KiB · f626343 Raw
98 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=loop-vectorize -force-vector-interleave=4 -force-vector-width=1 -S | FileCheck --check-prefixes=CHECK,DEFAULT %s3; RUN: opt < %s -passes=loop-vectorize -force-vector-interleave=4 -force-vector-width=1 -lv-strided-pointer-ivs=true -S | FileCheck --check-prefixes=CHECK,STRIDED %s4target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"5 6; Test the scalar expansion of a non-constant stride pointer IV7define void @non_constant_scalar_expansion(i32 %0, ptr %call) {8; DEFAULT-LABEL: @non_constant_scalar_expansion(9; DEFAULT-NEXT:  entry:10; DEFAULT-NEXT:    [[MUL:%.*]] = shl i32 [[TMP0:%.*]], 111; DEFAULT-NEXT:    br label [[FOR_COND:%.*]]12; DEFAULT:       for.cond:13; DEFAULT-NEXT:    [[TMP1:%.*]] = phi i32 [ 30, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_COND]] ]14; DEFAULT-NEXT:    [[P_0:%.*]] = phi ptr [ null, [[ENTRY]] ], [ [[ADD_PTR:%.*]], [[FOR_COND]] ]15; DEFAULT-NEXT:    [[ADD_PTR]] = getelementptr i8, ptr [[P_0]], i32 [[MUL]]16; DEFAULT-NEXT:    [[ARRAYIDX:%.*]] = getelementptr ptr, ptr [[CALL:%.*]], i32 [[TMP1]]17; DEFAULT-NEXT:    store ptr [[P_0]], ptr [[ARRAYIDX]], align 418; DEFAULT-NEXT:    [[INC]] = add i32 [[TMP1]], 119; DEFAULT-NEXT:    [[TOBOOL_NOT:%.*]] = icmp eq i32 [[TMP1]], 020; DEFAULT-NEXT:    br i1 [[TOBOOL_NOT]], label [[FOR_END:%.*]], label [[FOR_COND]]21; DEFAULT:       for.end:22; DEFAULT-NEXT:    ret void23;24; STRIDED-LABEL: @non_constant_scalar_expansion(25; STRIDED-NEXT:  entry:26; STRIDED-NEXT:    [[MUL:%.*]] = shl i32 [[TMP0:%.*]], 127; STRIDED-NEXT:    [[TMP1:%.*]] = sext i32 [[MUL]] to i6428; STRIDED-NEXT:    br label [[VECTOR_PH:%.*]]29; STRIDED:       vector.ph:30; STRIDED-NEXT:    [[TMP2:%.*]] = mul i64 4294967264, [[TMP1]]31; STRIDED-NEXT:    [[IND_END:%.*]] = getelementptr i8, ptr null, i64 [[TMP2]]32; STRIDED-NEXT:    br label [[VECTOR_BODY:%.*]]33; STRIDED:       vector.body:34; STRIDED-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]35; STRIDED-NEXT:    [[DOTCAST:%.*]] = trunc i64 [[INDEX]] to i3236; STRIDED-NEXT:    [[OFFSET_IDX:%.*]] = add i32 30, [[DOTCAST]]37; STRIDED-NEXT:    [[TMP4:%.*]] = add i32 [[OFFSET_IDX]], 138; STRIDED-NEXT:    [[TMP5:%.*]] = add i32 [[OFFSET_IDX]], 239; STRIDED-NEXT:    [[TMP6:%.*]] = add i32 [[OFFSET_IDX]], 340; STRIDED-NEXT:    [[OFFSET_IDX2:%.*]] = mul i64 [[INDEX]], [[TMP1]]41; STRIDED-NEXT:    [[TMP9:%.*]] = mul i64 1, [[TMP1]]42; STRIDED-NEXT:    [[TMP10:%.*]] = add i64 [[OFFSET_IDX2]], [[TMP9]]43; STRIDED-NEXT:    [[TMP11:%.*]] = mul i64 2, [[TMP1]]44; STRIDED-NEXT:    [[TMP12:%.*]] = add i64 [[OFFSET_IDX2]], [[TMP11]]45; STRIDED-NEXT:    [[TMP13:%.*]] = mul i64 3, [[TMP1]]46; STRIDED-NEXT:    [[TMP14:%.*]] = add i64 [[OFFSET_IDX2]], [[TMP13]]47; STRIDED-NEXT:    [[TMP15:%.*]] = getelementptr i8, ptr null, i64 [[OFFSET_IDX2]]48; STRIDED-NEXT:    [[TMP16:%.*]] = getelementptr i8, ptr null, i64 [[TMP10]]49; STRIDED-NEXT:    [[TMP17:%.*]] = getelementptr i8, ptr null, i64 [[TMP12]]50; STRIDED-NEXT:    [[TMP18:%.*]] = getelementptr i8, ptr null, i64 [[TMP14]]51; STRIDED-NEXT:    [[TMP19:%.*]] = getelementptr ptr, ptr [[CALL:%.*]], i32 [[OFFSET_IDX]]52; STRIDED-NEXT:    [[TMP20:%.*]] = getelementptr ptr, ptr [[CALL]], i32 [[TMP4]]53; STRIDED-NEXT:    [[TMP21:%.*]] = getelementptr ptr, ptr [[CALL]], i32 [[TMP5]]54; STRIDED-NEXT:    [[TMP22:%.*]] = getelementptr ptr, ptr [[CALL]], i32 [[TMP6]]55; STRIDED-NEXT:    store ptr [[TMP15]], ptr [[TMP19]], align 456; STRIDED-NEXT:    store ptr [[TMP16]], ptr [[TMP20]], align 457; STRIDED-NEXT:    store ptr [[TMP17]], ptr [[TMP21]], align 458; STRIDED-NEXT:    store ptr [[TMP18]], ptr [[TMP22]], align 459; STRIDED-NEXT:    [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 460; STRIDED-NEXT:    [[TMP23:%.*]] = icmp eq i64 [[INDEX_NEXT]], 429496726461; STRIDED-NEXT:    br i1 [[TMP23]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]62; STRIDED:       middle.block:63; STRIDED-NEXT:    br label [[SCALAR_PH:%.*]]64; STRIDED:       scalar.ph:65; STRIDED-NEXT:    br label [[FOR_COND:%.*]]66; STRIDED:       for.cond:67; STRIDED-NEXT:    [[TMP24:%.*]] = phi i32 [ -2, [[SCALAR_PH]] ], [ [[INC:%.*]], [[FOR_COND]] ]68; STRIDED-NEXT:    [[P_0:%.*]] = phi ptr [ [[IND_END]], [[SCALAR_PH]] ], [ [[ADD_PTR:%.*]], [[FOR_COND]] ]69; STRIDED-NEXT:    [[ADD_PTR]] = getelementptr i8, ptr [[P_0]], i32 [[MUL]]70; STRIDED-NEXT:    [[ARRAYIDX:%.*]] = getelementptr ptr, ptr [[CALL]], i32 [[TMP24]]71; STRIDED-NEXT:    store ptr [[P_0]], ptr [[ARRAYIDX]], align 472; STRIDED-NEXT:    [[INC]] = add i32 [[TMP24]], 173; STRIDED-NEXT:    [[TOBOOL_NOT:%.*]] = icmp eq i32 [[TMP24]], 074; STRIDED-NEXT:    br i1 [[TOBOOL_NOT]], label [[FOR_END:%.*]], label [[FOR_COND]], !llvm.loop [[LOOP3:![0-9]+]]75; STRIDED:       for.end:76; STRIDED-NEXT:    ret void77;78entry:79  %mul = shl i32 %0, 180  br label %for.cond81 82for.cond:                                         ; preds = %for.body, %entry83  %1 = phi i32 [ 30, %entry ], [ %inc, %for.cond ]84  %p.0 = phi ptr [ null, %entry ], [ %add.ptr, %for.cond ]85  %add.ptr = getelementptr i8, ptr %p.0, i32 %mul86  %arrayidx = getelementptr ptr, ptr %call, i32 %187  store ptr %p.0, ptr %arrayidx, align 488  %inc = add i32 %1, 189  %tobool.not = icmp eq i32 %1, 090  br i1 %tobool.not, label %for.end, label %for.cond91 92 93for.end:                                          ; preds = %for.cond94  ret void95}96;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:97; CHECK: {{.*}}98