1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -instcombine -S | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32" 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdefine i32 @mul(i32 %x, i32 %y) { 6*9880d681SAndroid Build Coastguard Worker %A = trunc i32 %x to i8 7*9880d681SAndroid Build Coastguard Worker %B = trunc i32 %y to i8 8*9880d681SAndroid Build Coastguard Worker %C = mul i8 %A, %B 9*9880d681SAndroid Build Coastguard Worker %D = zext i8 %C to i32 10*9880d681SAndroid Build Coastguard Worker ret i32 %D 11*9880d681SAndroid Build Coastguard Worker; CHECK: %C = mul i32 %x, %y 12*9880d681SAndroid Build Coastguard Worker; CHECK: %D = and i32 %C, 255 13*9880d681SAndroid Build Coastguard Worker; CHECK: ret i32 %D 14*9880d681SAndroid Build Coastguard Worker} 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerdefine i32 @select1(i1 %cond, i32 %x, i32 %y, i32 %z) { 17*9880d681SAndroid Build Coastguard Worker %A = trunc i32 %x to i8 18*9880d681SAndroid Build Coastguard Worker %B = trunc i32 %y to i8 19*9880d681SAndroid Build Coastguard Worker %C = trunc i32 %z to i8 20*9880d681SAndroid Build Coastguard Worker %D = add i8 %A, %B 21*9880d681SAndroid Build Coastguard Worker %E = select i1 %cond, i8 %C, i8 %D 22*9880d681SAndroid Build Coastguard Worker %F = zext i8 %E to i32 23*9880d681SAndroid Build Coastguard Worker ret i32 %F 24*9880d681SAndroid Build Coastguard Worker; CHECK: %D = add i32 %x, %y 25*9880d681SAndroid Build Coastguard Worker; CHECK: %E = select i1 %cond, i32 %z, i32 %D 26*9880d681SAndroid Build Coastguard Worker; CHECK: %F = and i32 %E, 255 27*9880d681SAndroid Build Coastguard Worker; CHECK: ret i32 %F 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerdefine i8 @select2(i1 %cond, i8 %x, i8 %y, i8 %z) { 31*9880d681SAndroid Build Coastguard Worker %A = zext i8 %x to i32 32*9880d681SAndroid Build Coastguard Worker %B = zext i8 %y to i32 33*9880d681SAndroid Build Coastguard Worker %C = zext i8 %z to i32 34*9880d681SAndroid Build Coastguard Worker %D = add i32 %A, %B 35*9880d681SAndroid Build Coastguard Worker %E = select i1 %cond, i32 %C, i32 %D 36*9880d681SAndroid Build Coastguard Worker %F = trunc i32 %E to i8 37*9880d681SAndroid Build Coastguard Worker ret i8 %F 38*9880d681SAndroid Build Coastguard Worker; CHECK: %D = add i8 %x, %y 39*9880d681SAndroid Build Coastguard Worker; CHECK: %E = select i1 %cond, i8 %z, i8 %D 40*9880d681SAndroid Build Coastguard Worker; CHECK: ret i8 %E 41*9880d681SAndroid Build Coastguard Worker} 42