brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.0 KiB · bc9cf4f Raw
89 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s -passes=loop-vectorize,dce,instcombine -S | FileCheck -check-prefix=GFX9 %s3; RUN: opt -mtriple=amdgcn-amd-amdhsa -mcpu=fiji < %s -passes=loop-vectorize,dce,instcombine -S | FileCheck -check-prefix=VI %s4; RUN: opt -mtriple=amdgcn-amd-amdhsa -mcpu=hawaii < %s -passes=loop-vectorize,dce,instcombine -S | FileCheck -check-prefix=CI %s5 6define half @vectorize_v2f16_loop(ptr addrspace(1) noalias %s) {7; GFX9-LABEL: @vectorize_v2f16_loop(8; GFX9-NEXT:  entry:9; GFX9-NEXT:    br label [[VECTOR_PH:%.*]]10; GFX9:       vector.ph:11; GFX9-NEXT:    br label [[VECTOR_BODY:%.*]]12; GFX9:       vector.body:13; GFX9-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]14; GFX9-NEXT:    [[VEC_PHI:%.*]] = phi <2 x half> [ zeroinitializer, [[VECTOR_PH]] ], [ [[TMP2:%.*]], [[VECTOR_BODY]] ]15; GFX9-NEXT:    [[VEC_PHI1:%.*]] = phi <2 x half> [ zeroinitializer, [[VECTOR_PH]] ], [ [[TMP3:%.*]], [[VECTOR_BODY]] ]16; GFX9-NEXT:    [[TMP0:%.*]] = getelementptr inbounds half, ptr addrspace(1) [[S:%.*]], i64 [[INDEX]]17; GFX9-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw i8, ptr addrspace(1) [[TMP0]], i64 418; GFX9-NEXT:    [[WIDE_LOAD:%.*]] = load <2 x half>, ptr addrspace(1) [[TMP0]], align 219; GFX9-NEXT:    [[WIDE_LOAD2:%.*]] = load <2 x half>, ptr addrspace(1) [[TMP1]], align 220; GFX9-NEXT:    [[TMP2]] = fadd fast <2 x half> [[VEC_PHI]], [[WIDE_LOAD]]21; GFX9-NEXT:    [[TMP3]] = fadd fast <2 x half> [[VEC_PHI1]], [[WIDE_LOAD2]]22; GFX9-NEXT:    [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 423; GFX9-NEXT:    [[TMP4:%.*]] = icmp eq i64 [[INDEX_NEXT]], 25624; GFX9-NEXT:    br i1 [[TMP4]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]25; GFX9:       middle.block:26; GFX9-NEXT:    br label [[FOR_BODY:%.*]]27; GFX9:       for.end:28; GFX9-NEXT:    [[BIN_RDX:%.*]] = fadd fast <2 x half> [[TMP3]], [[TMP2]]29; GFX9-NEXT:    [[ADD_LCSSA:%.*]] = call fast half @llvm.vector.reduce.fadd.v2f16(half 0xH0000, <2 x half> [[BIN_RDX]])30; GFX9-NEXT:    ret half [[ADD_LCSSA]]31;32; VI-LABEL: @vectorize_v2f16_loop(33; VI-NEXT:  entry:34; VI-NEXT:    br label [[VECTOR_PH:%.*]]35; VI:       vector.ph:36; VI-NEXT:    br label [[VECTOR_BODY:%.*]]37; VI:       vector.body:38; VI-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]39; VI-NEXT:    [[VEC_PHI:%.*]] = phi <2 x half> [ zeroinitializer, [[VECTOR_PH]] ], [ [[TMP2:%.*]], [[VECTOR_BODY]] ]40; VI-NEXT:    [[VEC_PHI1:%.*]] = phi <2 x half> [ zeroinitializer, [[VECTOR_PH]] ], [ [[TMP3:%.*]], [[VECTOR_BODY]] ]41; VI-NEXT:    [[TMP0:%.*]] = getelementptr inbounds half, ptr addrspace(1) [[S:%.*]], i64 [[INDEX]]42; VI-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw i8, ptr addrspace(1) [[TMP0]], i64 443; VI-NEXT:    [[WIDE_LOAD:%.*]] = load <2 x half>, ptr addrspace(1) [[TMP0]], align 244; VI-NEXT:    [[WIDE_LOAD2:%.*]] = load <2 x half>, ptr addrspace(1) [[TMP1]], align 245; VI-NEXT:    [[TMP2]] = fadd fast <2 x half> [[VEC_PHI]], [[WIDE_LOAD]]46; VI-NEXT:    [[TMP3]] = fadd fast <2 x half> [[VEC_PHI1]], [[WIDE_LOAD2]]47; VI-NEXT:    [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 448; VI-NEXT:    [[TMP4:%.*]] = icmp eq i64 [[INDEX_NEXT]], 25649; VI-NEXT:    br i1 [[TMP4]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]50; VI:       middle.block:51; VI-NEXT:    br label [[FOR_BODY:%.*]]52; VI:       for.end:53; VI-NEXT:    [[BIN_RDX:%.*]] = fadd fast <2 x half> [[TMP3]], [[TMP2]]54; VI-NEXT:    [[ADD_LCSSA:%.*]] = call fast half @llvm.vector.reduce.fadd.v2f16(half 0xH0000, <2 x half> [[BIN_RDX]])55; VI-NEXT:    ret half [[ADD_LCSSA]]56;57; CI-LABEL: @vectorize_v2f16_loop(58; CI-NEXT:  entry:59; CI-NEXT:    br label [[FOR_BODY:%.*]]60; CI:       for.body:61; CI-NEXT:    [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDVARS_IV_NEXT:%.*]], [[FOR_BODY]] ]62; CI-NEXT:    [[Q_04:%.*]] = phi half [ 0xH0000, [[ENTRY]] ], [ [[ADD:%.*]], [[FOR_BODY]] ]63; CI-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw half, ptr addrspace(1) [[S:%.*]], i64 [[INDVARS_IV]]64; CI-NEXT:    [[TMP0:%.*]] = load half, ptr addrspace(1) [[ARRAYIDX]], align 265; CI-NEXT:    [[ADD]] = fadd fast half [[Q_04]], [[TMP0]]66; CI-NEXT:    [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 167; CI-NEXT:    [[EXITCOND:%.*]] = icmp eq i64 [[INDVARS_IV_NEXT]], 25668; CI-NEXT:    br i1 [[EXITCOND]], label [[FOR_END:%.*]], label [[FOR_BODY]]69; CI:       for.end:70; CI-NEXT:    ret half [[ADD]]71;72entry:73  br label %for.body74 75for.body:76  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]77  %q.04 = phi half [ 0.0, %entry ], [ %add, %for.body ]78  %arrayidx = getelementptr inbounds half, ptr addrspace(1) %s, i64 %indvars.iv79  %0 = load half, ptr addrspace(1) %arrayidx, align 280  %add = fadd fast half %q.04, %081  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 182  %exitcond = icmp eq i64 %indvars.iv.next, 25683  br i1 %exitcond, label %for.end, label %for.body84 85for.end:86  %add.lcssa = phi half [ %add, %for.body ]87  ret half %add.lcssa88}89