1*9880d681SAndroid Build Coastguard Worker; RUN: opt -S -debug %s 2>&1 | FileCheck %s --check-prefix=OPT-O0 2*9880d681SAndroid Build Coastguard Worker; RUN: opt -O1 -S -debug %s 2>&1 | FileCheck %s --check-prefix=OPT-O1 3*9880d681SAndroid Build Coastguard Worker; RUN: opt -O2 -S -debug %s 2>&1 | FileCheck %s --check-prefix=OPT-O1 --check-prefix=OPT-O2O3 4*9880d681SAndroid Build Coastguard Worker; RUN: opt -O3 -S -debug %s 2>&1 | FileCheck %s --check-prefix=OPT-O1 --check-prefix=OPT-O2O3 5*9880d681SAndroid Build Coastguard Worker; RUN: opt -bb-vectorize -dce -die -loweratomic -S -debug %s 2>&1 | FileCheck %s --check-prefix=OPT-MORE 6*9880d681SAndroid Build Coastguard Worker; RUN: opt -indvars -licm -loop-deletion -loop-extract -loop-idiom -loop-instsimplify -loop-reduce -loop-reroll -loop-rotate -loop-unroll -loop-unswitch -S -debug %s 2>&1 | FileCheck %s --check-prefix=OPT-LOOP 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker; REQUIRES: asserts 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker; This test verifies that we don't run target independent IR-level 11*9880d681SAndroid Build Coastguard Worker; optimizations on optnone functions. 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline optnone 14*9880d681SAndroid Build Coastguard Workerdefine i32 @_Z3fooi(i32 %x) #0 { 15*9880d681SAndroid Build Coastguard Workerentry: 16*9880d681SAndroid Build Coastguard Worker %x.addr = alloca i32, align 4 17*9880d681SAndroid Build Coastguard Worker store i32 %x, i32* %x.addr, align 4 18*9880d681SAndroid Build Coastguard Worker br label %while.cond 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerwhile.cond: ; preds = %while.body, %entry 21*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %x.addr, align 4 22*9880d681SAndroid Build Coastguard Worker %dec = add nsw i32 %0, -1 23*9880d681SAndroid Build Coastguard Worker store i32 %dec, i32* %x.addr, align 4 24*9880d681SAndroid Build Coastguard Worker %tobool = icmp ne i32 %0, 0 25*9880d681SAndroid Build Coastguard Worker br i1 %tobool, label %while.body, label %while.end 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Workerwhile.body: ; preds = %while.cond 28*9880d681SAndroid Build Coastguard Worker br label %while.cond 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerwhile.end: ; preds = %while.cond 31*9880d681SAndroid Build Coastguard Worker ret i32 0 32*9880d681SAndroid Build Coastguard Worker} 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Workerattributes #0 = { optnone noinline } 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Worker; Nothing that runs at -O0 gets skipped. 37*9880d681SAndroid Build Coastguard Worker; OPT-O0-NOT: Skipping pass 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker; IR passes run at -O1 and higher. 40*9880d681SAndroid Build Coastguard Worker; OPT-O1-DAG: Skipping pass 'Aggressive Dead Code Elimination' 41*9880d681SAndroid Build Coastguard Worker; OPT-O1-DAG: Skipping pass 'Combine redundant instructions' 42*9880d681SAndroid Build Coastguard Worker; OPT-O1-DAG: Skipping pass 'Dead Store Elimination' 43*9880d681SAndroid Build Coastguard Worker; OPT-O1-DAG: Skipping pass 'Early CSE' 44*9880d681SAndroid Build Coastguard Worker; OPT-O1-DAG: Skipping pass 'Jump Threading' 45*9880d681SAndroid Build Coastguard Worker; OPT-O1-DAG: Skipping pass 'MemCpy Optimization' 46*9880d681SAndroid Build Coastguard Worker; OPT-O1-DAG: Skipping pass 'Reassociate expressions' 47*9880d681SAndroid Build Coastguard Worker; OPT-O1-DAG: Skipping pass 'Simplify the CFG' 48*9880d681SAndroid Build Coastguard Worker; OPT-O1-DAG: Skipping pass 'Sparse Conditional Constant Propagation' 49*9880d681SAndroid Build Coastguard Worker; OPT-O1-DAG: Skipping pass 'SROA' 50*9880d681SAndroid Build Coastguard Worker; OPT-O1-DAG: Skipping pass 'Tail Call Elimination' 51*9880d681SAndroid Build Coastguard Worker; OPT-O1-DAG: Skipping pass 'Value Propagation' 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Worker; Additional IR passes run at -O2 and higher. 54*9880d681SAndroid Build Coastguard Worker; OPT-O2O3-DAG: Skipping pass 'Global Value Numbering' 55*9880d681SAndroid Build Coastguard Worker; OPT-O2O3-DAG: Skipping pass 'SLP Vectorizer' 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Worker; Additional IR passes that opt doesn't turn on by default. 58*9880d681SAndroid Build Coastguard Worker; OPT-MORE-DAG: Skipping pass 'Basic-Block Vectorization' 59*9880d681SAndroid Build Coastguard Worker; OPT-MORE-DAG: Skipping pass 'Dead Code Elimination' 60*9880d681SAndroid Build Coastguard Worker; OPT-MORE-DAG: Skipping pass 'Dead Instruction Elimination' 61*9880d681SAndroid Build Coastguard Worker; OPT-MORE-DAG: Skipping pass 'Lower atomic intrinsics 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Worker; Loop IR passes that opt doesn't turn on by default. 64*9880d681SAndroid Build Coastguard Worker; OPT-LOOP-DAG: Skipping pass 'Delete dead loops' 65*9880d681SAndroid Build Coastguard Worker; OPT-LOOP-DAG: Skipping pass 'Extract loops into new functions' 66*9880d681SAndroid Build Coastguard Worker; OPT-LOOP-DAG: Skipping pass 'Induction Variable Simplification' 67*9880d681SAndroid Build Coastguard Worker; OPT-LOOP-DAG: Skipping pass 'Loop Invariant Code Motion' 68*9880d681SAndroid Build Coastguard Worker; OPT-LOOP-DAG: Skipping pass 'Loop Strength Reduction' 69*9880d681SAndroid Build Coastguard Worker; OPT-LOOP-DAG: Skipping pass 'Recognize loop idioms' 70*9880d681SAndroid Build Coastguard Worker; OPT-LOOP-DAG: Skipping pass 'Reroll loops' 71*9880d681SAndroid Build Coastguard Worker; OPT-LOOP-DAG: Skipping pass 'Rotate Loops' 72*9880d681SAndroid Build Coastguard Worker; OPT-LOOP-DAG: Skipping pass 'Simplify instructions in loops' 73*9880d681SAndroid Build Coastguard Worker; OPT-LOOP-DAG: Skipping pass 'Unroll loops' 74*9880d681SAndroid Build Coastguard Worker; OPT-LOOP-DAG: Skipping pass 'Unswitch loops' 75