brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.7 KiB · 922ebe7 Raw
42 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals none --version 52; RUN: opt < %s -passes=loop-vectorize -force-vector-width=4 -S | FileCheck %s3 4; Check that we don't unnecessarily broadcast %pow5define void @powi_only_first_lane_used_of_second_arg(ptr %p, i32 %pow) {6; CHECK-LABEL: define void @powi_only_first_lane_used_of_second_arg(7; CHECK-SAME: ptr [[P:%.*]], i32 [[POW:%.*]]) {8; CHECK-NEXT:  [[ENTRY:.*:]]9; CHECK-NEXT:    br label %[[VECTOR_PH:.*]]10; CHECK:       [[VECTOR_PH]]:11; CHECK-NEXT:    br label %[[VECTOR_BODY:.*]]12; CHECK:       [[VECTOR_BODY]]:13; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]14; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr float, ptr [[P]], i32 [[INDEX]]15; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x float>, ptr [[TMP0]], align 416; CHECK-NEXT:    [[TMP2:%.*]] = call <4 x float> @llvm.powi.v4f32.i32(<4 x float> [[WIDE_LOAD]], i32 [[POW]])17; CHECK-NEXT:    store <4 x float> [[TMP2]], ptr [[TMP0]], align 418; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 419; CHECK-NEXT:    [[TMP3:%.*]] = icmp eq i32 [[INDEX_NEXT]], 102420; CHECK-NEXT:    br i1 [[TMP3]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]21; CHECK:       [[MIDDLE_BLOCK]]:22; CHECK-NEXT:    br label %[[EXIT:.*]]23; CHECK:       [[EXIT]]:24; CHECK-NEXT:    ret void25;26entry:27  br label %loop28 29loop:30  %iv = phi i32 [0, %entry], [%iv.next, %loop]31  %p.gep = getelementptr float, ptr %p, i32 %iv32  %x = load float, ptr %p.gep33  %y = call float @llvm.powi(float %x, i32 %pow)34  store float %y, ptr %p.gep35  %iv.next = add i32 %iv, 136  %done = icmp eq i32 %iv.next, 102437  br i1 %done, label %exit, label %loop38 39exit:40  ret void41}42