brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.5 KiB · c43d624 Raw
70 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals none --version 52; RUN: opt -p loop-vectorize -S %s | FileCheck %s3 4target triple = "aarch64-unknown-linux-gnu"5 6define void @licm_replicate_call(double %x, ptr %dst) {7; CHECK-LABEL: define void @licm_replicate_call(8; CHECK-SAME: double [[X:%.*]], ptr [[DST:%.*]]) {9; CHECK-NEXT:  [[ENTRY:.*:]]10; CHECK-NEXT:    br label %[[VECTOR_PH:.*]]11; CHECK:       [[VECTOR_PH]]:12; CHECK-NEXT:    [[TMP1:%.*]] = tail call double @llvm.pow.f64(double [[X]], double 3.000000e+00)13; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <2 x double> poison, double [[TMP1]], i64 014; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <2 x double> [[BROADCAST_SPLATINSERT]], <2 x double> poison, <2 x i32> zeroinitializer15; CHECK-NEXT:    br label %[[VECTOR_BODY:.*]]16; CHECK:       [[VECTOR_BODY]]:17; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]18; CHECK-NEXT:    [[VEC_IND:%.*]] = phi <2 x i32> [ <i32 0, i32 1>, %[[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], %[[VECTOR_BODY]] ]19; CHECK-NEXT:    [[STEP_ADD:%.*]] = add <2 x i32> [[VEC_IND]], splat (i32 2)20; CHECK-NEXT:    [[TMP4:%.*]] = uitofp <2 x i32> [[VEC_IND]] to <2 x double>21; CHECK-NEXT:    [[TMP5:%.*]] = uitofp <2 x i32> [[STEP_ADD]] to <2 x double>22; CHECK-NEXT:    [[TMP6:%.*]] = fmul <2 x double> [[TMP3]], [[TMP4]]23; CHECK-NEXT:    [[TMP7:%.*]] = fmul <2 x double> [[TMP3]], [[TMP5]]24; CHECK-NEXT:    [[TMP8:%.*]] = getelementptr inbounds double, ptr [[DST]], i64 [[INDEX]]25; CHECK-NEXT:    [[TMP10:%.*]] = getelementptr inbounds double, ptr [[TMP8]], i64 226; CHECK-NEXT:    store <2 x double> [[TMP6]], ptr [[TMP8]], align 827; CHECK-NEXT:    store <2 x double> [[TMP7]], ptr [[TMP10]], align 828; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 429; CHECK-NEXT:    [[VEC_IND_NEXT]] = add <2 x i32> [[STEP_ADD]], splat (i32 2)30; CHECK-NEXT:    [[TMP11:%.*]] = icmp eq i64 [[INDEX_NEXT]], 12831; CHECK-NEXT:    br i1 [[TMP11]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]32; CHECK:       [[MIDDLE_BLOCK]]:33; CHECK-NEXT:    br label %[[SCALAR_PH:.*]]34; CHECK:       [[SCALAR_PH]]:35; CHECK-NEXT:    br label %[[LOOP:.*]]36; CHECK:       [[LOOP]]:37; CHECK-NEXT:    [[IV:%.*]] = phi i64 [ 128, %[[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]38; CHECK-NEXT:    [[IV_TRUNC:%.*]] = trunc i64 [[IV]] to i3239; CHECK-NEXT:    [[IV_AS_FP:%.*]] = uitofp i32 [[IV_TRUNC]] to double40; CHECK-NEXT:    [[P:%.*]] = tail call double @llvm.pow.f64(double [[X]], double 3.000000e+00)41; CHECK-NEXT:    [[MUL:%.*]] = fmul double [[P]], [[IV_AS_FP]]42; CHECK-NEXT:    [[GEP_DST:%.*]] = getelementptr inbounds double, ptr [[DST]], i64 [[IV]]43; CHECK-NEXT:    store double [[MUL]], ptr [[GEP_DST]], align 844; CHECK-NEXT:    [[IV_NEXT]] = add i64 [[IV]], 145; CHECK-NEXT:    [[EC:%.*]] = icmp eq i64 [[IV]], 12846; CHECK-NEXT:    br i1 [[EC]], label %[[EXIT:.*]], label %[[LOOP]], !llvm.loop [[LOOP3:![0-9]+]]47; CHECK:       [[EXIT]]:48; CHECK-NEXT:    ret void49;50entry:51  br label %loop52 53loop:54  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]55  %iv.trunc = trunc i64 %iv to i3256  %iv.as.fp = uitofp i32 %iv.trunc to double57  %p = tail call double @llvm.pow.f64(double %x, double 3.000000e+00)58  %mul = fmul double %p, %iv.as.fp59  %gep.dst = getelementptr inbounds double, ptr %dst, i64 %iv60  store double %mul, ptr %gep.dst, align 861  %iv.next = add i64 %iv, 162  %ec = icmp eq i64 %iv, 12863  br i1 %ec, label %exit, label %loop64 65exit:66  ret void67}68 69declare double @llvm.pow.f64(double, double)70