82 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -p loop-vectorize -S %s | FileCheck %s3 4target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"5target triple = "x86_64-apple-macosx"6 7define i32 @ephemeral_load_and_compare_iv_used_outside(ptr %start, ptr %end) #0 {8; CHECK-LABEL: define i32 @ephemeral_load_and_compare_iv_used_outside(9; CHECK-SAME: ptr [[START:%.*]], ptr [[END:%.*]]) #[[ATTR0:[0-9]+]] {10; CHECK-NEXT: [[ENTRY:.*]]:11; CHECK-NEXT: br label %[[LOOP:.*]]12; CHECK: [[LOOP]]:13; CHECK-NEXT: [[IV:%.*]] = phi ptr [ [[START]], %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]14; CHECK-NEXT: [[IV_NEXT]] = getelementptr nusw i8, ptr [[IV]], i64 -815; CHECK-NEXT: [[L1:%.*]] = load i32, ptr [[IV]], align 416; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[L1]], 017; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])18; CHECK-NEXT: [[CMP_NOT:%.*]] = icmp eq ptr [[IV]], [[END]]19; CHECK-NEXT: br i1 [[CMP_NOT]], label %[[EXIT:.*]], label %[[LOOP]]20; CHECK: [[EXIT]]:21; CHECK-NEXT: [[IV_LCSSA:%.*]] = phi ptr [ [[IV]], %[[LOOP]] ]22; CHECK-NEXT: [[FINAL_LOAD:%.*]] = load i32, ptr [[IV_LCSSA]], align 423; CHECK-NEXT: ret i32 [[FINAL_LOAD]]24;25entry:26 br label %loop27 28loop:29 %iv = phi ptr [ %start, %entry ],[ %iv.next, %loop ]30 %iv.next = getelementptr nusw i8, ptr %iv, i64 -831 %l1 = load i32, ptr %iv, align 432 %cmp = icmp ne i32 %l1, 033 call void @llvm.assume(i1 %cmp)34 %cmp.not = icmp eq ptr %iv, %end35 br i1 %cmp.not, label %exit, label %loop36 37exit:38 %final.load = load i32, ptr %iv, align 439 ret i32 %final.load40}41 42define i32 @ephemeral_load_and_compare_another_load_used_outside(ptr %start, ptr %end) #0 {43; CHECK-LABEL: define i32 @ephemeral_load_and_compare_another_load_used_outside(44; CHECK-SAME: ptr [[START:%.*]], ptr [[END:%.*]]) #[[ATTR0]] {45; CHECK-NEXT: [[ENTRY:.*]]:46; CHECK-NEXT: br label %[[LOOP:.*]]47; CHECK: [[LOOP]]:48; CHECK-NEXT: [[IV:%.*]] = phi ptr [ [[START]], %[[ENTRY]] ], [ [[IV_NEXT2:%.*]], %[[LOOP]] ]49; CHECK-NEXT: [[IV_NEXT2]] = getelementptr nusw i8, ptr [[IV]], i64 -850; CHECK-NEXT: [[L1:%.*]] = load ptr, ptr [[END]], align 851; CHECK-NEXT: [[L2:%.*]] = load i32, ptr [[L1]], align 452; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[L2]], 053; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])54; CHECK-NEXT: [[CMP_NOT:%.*]] = icmp eq ptr [[IV]], [[END]]55; CHECK-NEXT: br i1 [[CMP_NOT]], label %[[EXIT:.*]], label %[[LOOP]]56; CHECK: [[EXIT]]:57; CHECK-NEXT: [[L1_LCSSA:%.*]] = phi ptr [ [[L1]], %[[LOOP]] ]58; CHECK-NEXT: [[FINAL_LOAD:%.*]] = load i32, ptr [[L1_LCSSA]], align 459; CHECK-NEXT: ret i32 [[FINAL_LOAD]]60;61entry:62 br label %loop63 64loop:65 %iv = phi ptr [ %start, %entry ], [ %iv.next2, %loop ]66 %iv.next2 = getelementptr nusw i8, ptr %iv, i64 -867 %l1 = load ptr, ptr %end, align 868 %l2 = load i32, ptr %l1, align 469 %cmp = icmp ne i32 %l2, 070 call void @llvm.assume(i1 %cmp)71 %cmp.not = icmp eq ptr %iv, %end72 br i1 %cmp.not, label %exit, label %loop73 74exit:75 %final.load = load i32, ptr %l1, align 476 ret i32 %final.load77}78 79declare void @llvm.assume(i1 noundef)80 81attributes #0 = { "target-cpu"="skylake-avx512" }82