Mercurial > hg > CbC > CbC_llvm
diff test/Transforms/InstCombine/and2.ll @ 95:afa8332a0e37 LLVM3.8
LLVM 3.8
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 13 Oct 2015 17:48:58 +0900 |
parents | 60c9769439b8 |
children | 1172e4bd9c6f |
line wrap: on
line diff
--- a/test/Transforms/InstCombine/and2.ll Wed Feb 18 14:56:07 2015 +0900 +++ b/test/Transforms/InstCombine/and2.ll Tue Oct 13 17:48:58 2015 +0900 @@ -77,3 +77,71 @@ %cond = and i1 %cmp1, %cmp2 ret i1 %cond } + +; combine -x & 1 into x & 1 +define i64 @test9(i64 %x) { +; CHECK-LABEL: @test9( +; CHECK-NOT: %sub = sub nsw i64 0, %x +; CHECK-NOT: %and = and i64 %sub, 1 +; CHECK-NEXT: %and = and i64 %x, 1 +; CHECK-NEXT: ret i64 %and + %sub = sub nsw i64 0, %x + %and = and i64 %sub, 1 + ret i64 %and +} + +define i64 @test10(i64 %x) { +; CHECK-LABEL: @test10( +; CHECK-NOT: %sub = sub nsw i64 0, %x +; CHECK-NEXT: %and = and i64 %x, 1 +; CHECK-NOT: %add = add i64 %sub, %and +; CHECK-NEXT: %add = sub i64 %and, %x +; CHECK-NEXT: ret i64 %add + %sub = sub nsw i64 0, %x + %and = and i64 %sub, 1 + %add = add i64 %sub, %and + ret i64 %add +} + +define i64 @fabs_double(double %x) { +; CHECK-LABEL: @fabs_double( +; CHECK-NEXT: %fabs = call double @llvm.fabs.f64(double %x) +; CHECK-NEXT: %and = bitcast double %fabs to i64 +; CHECK-NEXT: ret i64 %and + %bc = bitcast double %x to i64 + %and = and i64 %bc, 9223372036854775807 + ret i64 %and +} + +define i64 @fabs_double_swap(double %x) { +; CHECK-LABEL: @fabs_double_swap( +; CHECK-NEXT: %fabs = call double @llvm.fabs.f64(double %x) +; CHECK-NEXT: %and = bitcast double %fabs to i64 +; CHECK-NEXT: ret i64 %and + %bc = bitcast double %x to i64 + %and = and i64 9223372036854775807, %bc + ret i64 %and +} + +define i32 @fabs_float(float %x) { +; CHECK-LABEL: @fabs_float( +; CHECK-NEXT: %fabs = call float @llvm.fabs.f32(float %x) +; CHECK-NEXT: %and = bitcast float %fabs to i32 +; CHECK-NEXT: ret i32 %and + %bc = bitcast float %x to i32 + %and = and i32 %bc, 2147483647 + ret i32 %and +} + +; Make sure that only a bitcast is transformed. + +define i64 @fabs_double_not_bitcast(double %x) { +; CHECK-LABEL: @fabs_double_not_bitcast( +; CHECK-NEXT: %bc = fptoui double %x to i64 +; CHECK-NEXT: %and = and i64 %bc, 9223372036854775807 +; CHECK-NEXT: ret i64 %and + %bc = fptoui double %x to i64 + %and = and i64 %bc, 9223372036854775807 + ret i64 %and +} +