Sanjoy Das | ff855b6 | 2016-08-24 18:10:21 +0000 | [diff] [blame] | 1 | ; RUN: opt < %s -sccp -loop-deletion -simplifycfg -S | FileCheck %s |
Chris Lattner | 9d42084 | 2004-04-13 19:43:33 +0000 | [diff] [blame] | 2 | |
Sanjoy Das | ff855b6 | 2016-08-24 18:10:21 +0000 | [diff] [blame] | 3 | declare double @sqrt(double) readnone nounwind |
| 4 | %empty = type {} |
| 5 | declare %empty @has_side_effects() |
| 6 | |
| 7 | define double @test_0(i32 %param) { |
| 8 | ; CHECK-LABEL: @test_0( |
| 9 | ; CHECK-NOT: br |
| 10 | entry: |
Chris Lattner | 9d42084 | 2004-04-13 19:43:33 +0000 | [diff] [blame] | 11 | ; No matter how hard you try, sqrt(1.0) is always 1.0. This allows the |
| 12 | ; optimizer to delete this loop. |
| 13 | |
Chris Lattner | 9d42084 | 2004-04-13 19:43:33 +0000 | [diff] [blame] | 14 | br label %Loop |
Tanya Lattner | 1d526b9 | 2008-03-19 04:14:49 +0000 | [diff] [blame] | 15 | Loop: ; preds = %Loop, %entry |
| 16 | %I2 = phi i32 [ 0, %entry ], [ %I3, %Loop ] ; <i32> [#uses=1] |
| 17 | %V = phi double [ 1.000000e+00, %entry ], [ %V2, %Loop ] ; <double> [#uses=2] |
| 18 | %V2 = call double @sqrt( double %V ) ; <double> [#uses=1] |
| 19 | %I3 = add i32 %I2, 1 ; <i32> [#uses=2] |
| 20 | %tmp.7 = icmp ne i32 %I3, %param ; <i1> [#uses=1] |
| 21 | br i1 %tmp.7, label %Loop, label %Exit |
| 22 | Exit: ; preds = %Loop |
Chris Lattner | 9d42084 | 2004-04-13 19:43:33 +0000 | [diff] [blame] | 23 | ret double %V |
| 24 | } |
Tanya Lattner | 1d526b9 | 2008-03-19 04:14:49 +0000 | [diff] [blame] | 25 | |
Sanjoy Das | ff855b6 | 2016-08-24 18:10:21 +0000 | [diff] [blame] | 26 | define i32 @test_1() { |
| 27 | ; CHECK-LABEL: @test_1( |
| 28 | ; CHECK: call %empty @has_side_effects() |
| 29 | %1 = call %empty @has_side_effects() |
| 30 | ret i32 0 |
| 31 | } |