brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.8 KiB · 9882013 Raw
90 lines · plain
1; RUN: opt -S -force-vector-width=2 -force-vector-interleave=1 -passes=loop-vectorize,simplifycfg -verify-loop-info -simplifycfg-require-and-preserve-domtree=1 < %s | FileCheck %s2 3target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"4 5; Test no-predication of instructions that are provably safe, e.g. dividing by6; a non-zero constant.7define void @test(ptr nocapture %asd, ptr nocapture %aud,8                  ptr nocapture %asr, ptr nocapture %aur,9                  ptr nocapture %asd0, ptr nocapture %aud0,10                  ptr nocapture %asr0, ptr nocapture %aur011) {12entry:13  br label %for.body14 15for.cond.cleanup:                                 ; preds = %if.end16  ret void17 18; CHECK-LABEL: test19; CHECK: vector.body:20; CHECK: %{{.*}} = sdiv <2 x i32> %{{.*}}, splat (i32 11)21; CHECK: %{{.*}} = udiv <2 x i32> %{{.*}}, splat (i32 13)22; CHECK: %{{.*}} = srem <2 x i32> %{{.*}}, splat (i32 17)23; CHECK: %{{.*}} = urem <2 x i32> %{{.*}}, splat (i32 19)24; CHECK-NOT: %{{.*}} = sdiv <2 x i32> %{{.*}}, <i32 0, i32 0>25; CHECK-NOT: %{{.*}} = udiv <2 x i32> %{{.*}}, <i32 0, i32 0>26; CHECK-NOT: %{{.*}} = srem <2 x i32> %{{.*}}, <i32 0, i32 0>27; CHECK-NOT: %{{.*}} = urem <2 x i32> %{{.*}}, <i32 0, i32 0>28 29for.body:                                         ; preds = %if.end, %entry30  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %if.end ]31  %isd = getelementptr inbounds i32, ptr %asd, i64 %indvars.iv32  %iud = getelementptr inbounds i32, ptr %aud, i64 %indvars.iv33  %isr = getelementptr inbounds i32, ptr %asr, i64 %indvars.iv34  %iur = getelementptr inbounds i32, ptr %aur, i64 %indvars.iv35  %lsd = load i32, ptr %isd, align 436  %lud = load i32, ptr %iud, align 437  %lsr = load i32, ptr %isr, align 438  %lur = load i32, ptr %iur, align 439  %psd = add nsw i32 %lsd, 2340  %pud = add nsw i32 %lud, 2441  %psr = add nsw i32 %lsr, 2542  %pur = add nsw i32 %lur, 2643  %isd0 = getelementptr inbounds i32, ptr %asd0, i64 %indvars.iv44  %iud0 = getelementptr inbounds i32, ptr %aud0, i64 %indvars.iv45  %isr0 = getelementptr inbounds i32, ptr %asr0, i64 %indvars.iv46  %iur0 = getelementptr inbounds i32, ptr %aur0, i64 %indvars.iv47  %lsd0 = load i32, ptr %isd0, align 448  %lud0 = load i32, ptr %iud0, align 449  %lsr0 = load i32, ptr %isr0, align 450  %lur0 = load i32, ptr %iur0, align 451  %psd0 = add nsw i32 %lsd, 2752  %pud0 = add nsw i32 %lud, 2853  %psr0 = add nsw i32 %lsr, 2954  %pur0 = add nsw i32 %lur, 3055  %cmp1 = icmp slt i32 %lsd, 10056  br i1 %cmp1, label %if.then, label %if.end57 58if.then:                                          ; preds = %for.body59  %rsd = sdiv i32 %psd, 1160  %rud = udiv i32 %pud, 1361  %rsr = srem i32 %psr, 1762  %rur = urem i32 %pur, 1963  %rsd0 = sdiv i32 %psd0, 064  %rud0 = udiv i32 %pud0, 065  %rsr0 = srem i32 %psr0, 066  %rur0 = urem i32 %pur0, 067  br label %if.end68 69if.end:                                           ; preds = %if.then, %for.body70  %ysd.0 = phi i32 [ %rsd, %if.then ], [ %psd, %for.body ]71  %yud.0 = phi i32 [ %rud, %if.then ], [ %pud, %for.body ]72  %ysr.0 = phi i32 [ %rsr, %if.then ], [ %psr, %for.body ]73  %yur.0 = phi i32 [ %rur, %if.then ], [ %pur, %for.body ]74  %ysd0.0 = phi i32 [ %rsd0, %if.then ], [ %psd0, %for.body ]75  %yud0.0 = phi i32 [ %rud0, %if.then ], [ %pud0, %for.body ]76  %ysr0.0 = phi i32 [ %rsr0, %if.then ], [ %psr0, %for.body ]77  %yur0.0 = phi i32 [ %rur0, %if.then ], [ %pur0, %for.body ]78  store i32 %ysd.0, ptr %isd, align 479  store i32 %yud.0, ptr %iud, align 480  store i32 %ysr.0, ptr %isr, align 481  store i32 %yur.0, ptr %iur, align 482  store i32 %ysd0.0, ptr %isd0, align 483  store i32 %yud0.0, ptr %iud0, align 484  store i32 %ysr0.0, ptr %isr0, align 485  store i32 %yur0.0, ptr %iur0, align 486  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 187  %exitcond = icmp eq i64 %indvars.iv.next, 12888  br i1 %exitcond, label %for.cond.cleanup, label %for.body89}90