Duncan Sands | ba286d7 | 2011-10-26 20:55:21 +0000 | [diff] [blame] | 1 | ; RUN: opt < %s -instsimplify -S | FileCheck %s |
| 2 | |
| 3 | define i64 @pow2(i32 %x) { |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame^] | 4 | ; CHECK-LABEL: @pow2( |
Duncan Sands | ba286d7 | 2011-10-26 20:55:21 +0000 | [diff] [blame] | 5 | %negx = sub i32 0, %x |
| 6 | %x2 = and i32 %x, %negx |
| 7 | %e = zext i32 %x2 to i64 |
| 8 | %nege = sub i64 0, %e |
| 9 | %e2 = and i64 %e, %nege |
| 10 | ret i64 %e2 |
| 11 | ; CHECK: ret i64 %e |
| 12 | } |
Duncan Sands | 985ba63 | 2011-10-28 18:30:05 +0000 | [diff] [blame] | 13 | |
| 14 | define i64 @pow2b(i32 %x) { |
Stephen Lin | c1c7a13 | 2013-07-14 01:42:54 +0000 | [diff] [blame^] | 15 | ; CHECK-LABEL: @pow2b( |
Duncan Sands | 985ba63 | 2011-10-28 18:30:05 +0000 | [diff] [blame] | 16 | %sh = shl i32 2, %x |
| 17 | %e = zext i32 %sh to i64 |
| 18 | %nege = sub i64 0, %e |
| 19 | %e2 = and i64 %e, %nege |
| 20 | ret i64 %e2 |
| 21 | ; CHECK: ret i64 %e |
| 22 | } |