brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · 69c7f10 Raw
86 lines · plain
1; RUN: opt %loadNPMPolly -polly-analyze-read-only-scalars=true '-passes=polly-custom<optree>' -polly-print-optree -disable-output < %s | FileCheck %s -match-full-lines -check-prefixes=STATS,MODEL2; RUN: opt %loadNPMPolly -polly-analyze-read-only-scalars=false '-passes=polly-custom<optree>' -polly-print-optree -disable-output < %s | FileCheck %s -match-full-lines -check-prefixes=STATS,NOMODEL3;4; Move %val to %bodyB, so %bodyA can be removed (by -polly-simplify)5;6; for (int j = 0; j < n; j += 1) {7; bodyA:8;   double val = arg + 21.0;9;10; bodyB:11;   A[0] = val;12; }13;14define void @func(i32 %n, ptr noalias nonnull %A, double %arg) {15entry:16  br label %for17 18for:19  %j = phi i32 [0, %entry], [%j.inc, %inc]20  %j.cmp = icmp slt i32 %j, %n21  br i1 %j.cmp, label %bodyA, label %exit22 23    bodyA:24      %val = fadd double %arg, 21.025      br label %bodyB26 27    bodyB:28      store double %val, ptr %A29      br label %inc30 31inc:32  %j.inc = add nuw nsw i32 %j, 133  br label %for34 35exit:36  br label %return37 38return:39  ret void40}41 42 43; STATS: Statistics {44; STATS:     Instructions copied: 145; MODEL:     Read-only accesses copied: 146; NOMODEL:   Read-only accesses copied: 047; STATS:     Operand trees forwarded: 148; STATS:     Statements with forwarded operand trees: 149; STATS: }50 51; MODEL:      After statements {52; MODEL-NEXT:     Stmt_bodyA53; MODEL-NEXT:             ReadAccess :=       [Reduction Type: NONE] [Scalar: 1]54; MODEL-NEXT:                 [n] -> { Stmt_bodyA[i0] -> MemRef_arg[] };55; MODEL-NEXT:             MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]56; MODEL-NEXT:                 [n] -> { Stmt_bodyA[i0] -> MemRef_val[] };57; MODEL-NEXT:             Instructions {58; MODEL-NEXT:                   %val = fadd double %arg, 2.100000e+0159; MODEL-NEXT:                 }60; MODEL-NEXT:     Stmt_bodyB61; MODEL-NEXT:             MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]62; MODEL-NEXT:                 [n] -> { Stmt_bodyB[i0] -> MemRef_A[0] };63; MODEL-NEXT:             ReadAccess :=       [Reduction Type: NONE] [Scalar: 1]64; MODEL-NEXT:                 [n] -> { Stmt_bodyB[i0] -> MemRef_arg[] };65; MODEL-NEXT:             Instructions {66; MODEL-NEXT:                   %val = fadd double %arg, 2.100000e+0167; MODEL-NEXT:                   store double %val, ptr %A, align 868; MODEL-NEXT:                 }69; MODEL-NEXT: }70 71; NOMODEL:      After statements {72; NOMODEL-NEXT:     Stmt_bodyA73; NOMODEL-NEXT:             MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]74; NOMODEL-NEXT:                 [n] -> { Stmt_bodyA[i0] -> MemRef_val[] };75; NOMODEL-NEXT:             Instructions {76; NOMODEL-NEXT:                   %val = fadd double %arg, 2.100000e+0177; NOMODEL-NEXT:                 }78; NOMODEL-NEXT:     Stmt_bodyB79; NOMODEL-NEXT:             MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]80; NOMODEL-NEXT:                 [n] -> { Stmt_bodyB[i0] -> MemRef_A[0] };81; NOMODEL-NEXT:             Instructions {82; NOMODEL-NEXT:                   %val = fadd double %arg, 2.100000e+0183; NOMODEL-NEXT:                   store double %val, ptr %A, align 884; NOMODEL-NEXT:                 }85; NOMODEL-NEXT: }86