1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -instcombine -S | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" 4*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-unknown-linux-gnu" 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker; Should be optimized to one and. 7*9880d681SAndroid Build Coastguard Workerdefine i1 @test1(i32 %a, i32 %b) { 8*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test1( 9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %1 = xor i32 %a, %b 10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %2 = and i32 %1, 65280 11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %tmp = icmp ne i32 %2, 0 12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 %tmp 13*9880d681SAndroid Build Coastguard Worker %tmp1 = and i32 %a, 65280 ; <i32> [#uses=1] 14*9880d681SAndroid Build Coastguard Worker %tmp3 = and i32 %b, 65280 ; <i32> [#uses=1] 15*9880d681SAndroid Build Coastguard Worker %tmp = icmp ne i32 %tmp1, %tmp3 ; <i1> [#uses=1] 16*9880d681SAndroid Build Coastguard Worker ret i1 %tmp 17*9880d681SAndroid Build Coastguard Worker} 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @test2(i64 %A) { 20*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test2( 21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %[[trunc:.*]] = trunc i64 %A to i8 22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %[[icmp:.*]] = icmp sgt i8 %[[trunc]], -1 23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 %[[icmp]] 24*9880d681SAndroid Build Coastguard Worker %and = and i64 %A, 128 25*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i64 %and, 0 26*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 27*9880d681SAndroid Build Coastguard Worker} 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @test3(i64 %A) { 30*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test3( 31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %[[trunc:.*]] = trunc i64 %A to i8 32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %[[icmp:.*]] = icmp slt i8 %[[trunc]], 0 33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 %[[icmp]] 34*9880d681SAndroid Build Coastguard Worker %and = and i64 %A, 128 35*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i64 %and, 0 36*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 37*9880d681SAndroid Build Coastguard Worker} 38