Mercurial > hg > CbC > CbC_llvm
diff test/Transforms/InstCombine/and-compare.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/and-compare.ll Wed Feb 18 14:56:07 2015 +0900 +++ b/test/Transforms/InstCombine/and-compare.ll Tue Oct 13 17:48:58 2015 +0900 @@ -1,6 +1,9 @@ ; RUN: opt < %s -instcombine -S | \ ; RUN: FileCheck %s +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + ; Should be optimized to one and. define i1 @test1(i32 %a, i32 %b) { ; CHECK-LABEL: @test1( @@ -13,3 +16,23 @@ %tmp = icmp ne i32 %tmp1, %tmp3 ; <i1> [#uses=1] ret i1 %tmp } + +define zeroext i1 @test2(i64 %A) { +; CHECK-LABEL: @test2( +; CHECK-NEXT: %[[trunc:.*]] = trunc i64 %A to i8 +; CHECK-NEXT: %[[icmp:.*]] = icmp sgt i8 %[[trunc]], -1 +; CHECK-NEXT: ret i1 %[[icmp]] + %and = and i64 %A, 128 + %cmp = icmp eq i64 %and, 0 + ret i1 %cmp +} + +define zeroext i1 @test3(i64 %A) { +; CHECK-LABEL: @test3( +; CHECK-NEXT: %[[trunc:.*]] = trunc i64 %A to i8 +; CHECK-NEXT: %[[icmp:.*]] = icmp slt i8 %[[trunc]], 0 +; CHECK-NEXT: ret i1 %[[icmp]] + %and = and i64 %A, 128 + %cmp = icmp ne i64 %and, 0 + ret i1 %cmp +}