1*9880d681SAndroid Build Coastguard Worker; RUN: opt -S -instcombine < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker@c = common global i8 0, align 1 4*9880d681SAndroid Build Coastguard Worker@a = common global i8 0, align 1 5*9880d681SAndroid Build Coastguard Worker@b = common global i8 0, align 1 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workerdefine void @func() nounwind uwtable ssp { 8*9880d681SAndroid Build Coastguard Workerentry: 9*9880d681SAndroid Build Coastguard Worker %0 = load i8, i8* @c, align 1 10*9880d681SAndroid Build Coastguard Worker %conv = zext i8 %0 to i32 11*9880d681SAndroid Build Coastguard Worker %or = or i32 %conv, 1 12*9880d681SAndroid Build Coastguard Worker %conv1 = trunc i32 %or to i8 13*9880d681SAndroid Build Coastguard Worker store i8 %conv1, i8* @a, align 1 14*9880d681SAndroid Build Coastguard Worker %conv2 = zext i8 %conv1 to i32 15*9880d681SAndroid Build Coastguard Worker %neg = xor i32 %conv2, -1 16*9880d681SAndroid Build Coastguard Worker %and = and i32 1, %neg 17*9880d681SAndroid Build Coastguard Worker %conv3 = trunc i32 %and to i8 18*9880d681SAndroid Build Coastguard Worker store i8 %conv3, i8* @b, align 1 19*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* @a, align 1 20*9880d681SAndroid Build Coastguard Worker %conv4 = zext i8 %1 to i32 21*9880d681SAndroid Build Coastguard Worker %conv5 = zext i8 %conv3 to i32 22*9880d681SAndroid Build Coastguard Worker %tobool = icmp ne i32 %conv4, 0 23*9880d681SAndroid Build Coastguard Worker br i1 %tobool, label %land.rhs, label %land.end 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerland.rhs: ; preds = %entry 26*9880d681SAndroid Build Coastguard Worker %tobool8 = icmp ne i32 %conv5, 0 27*9880d681SAndroid Build Coastguard Worker br label %land.end 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Workerland.end: ; preds = %land.rhs, %entry 30*9880d681SAndroid Build Coastguard Worker %2 = phi i1 [ false, %entry ], [ %tobool8, %land.rhs ] 31*9880d681SAndroid Build Coastguard Worker %land.ext = zext i1 %2 to i32 32*9880d681SAndroid Build Coastguard Worker %mul = mul nsw i32 3, %land.ext 33*9880d681SAndroid Build Coastguard Worker %conv9 = trunc i32 %mul to i8 34*9880d681SAndroid Build Coastguard Worker store i8 %conv9, i8* @a, align 1 35*9880d681SAndroid Build Coastguard Worker ret void 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @func( 38*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: select 39*9880d681SAndroid Build Coastguard Worker} 40