1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86-64 2*9880d681SAndroid Build Coastguard Worker; PR 9267 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine<4 x i16> @func_16_32() { 5*9880d681SAndroid Build Coastguard Worker %F = load <4 x i32>, <4 x i32>* undef 6*9880d681SAndroid Build Coastguard Worker %G = trunc <4 x i32> %F to <4 x i16> 7*9880d681SAndroid Build Coastguard Worker %H = load <4 x i32>, <4 x i32>* undef 8*9880d681SAndroid Build Coastguard Worker %Y = trunc <4 x i32> %H to <4 x i16> 9*9880d681SAndroid Build Coastguard Worker %T = add <4 x i16> %Y, %G 10*9880d681SAndroid Build Coastguard Worker store <4 x i16>%T , <4 x i16>* undef 11*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %T 12*9880d681SAndroid Build Coastguard Worker} 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerdefine<4 x i16> @func_16_64() { 15*9880d681SAndroid Build Coastguard Worker %F = load <4 x i64>, <4 x i64>* undef 16*9880d681SAndroid Build Coastguard Worker %G = trunc <4 x i64> %F to <4 x i16> 17*9880d681SAndroid Build Coastguard Worker %H = load <4 x i64>, <4 x i64>* undef 18*9880d681SAndroid Build Coastguard Worker %Y = trunc <4 x i64> %H to <4 x i16> 19*9880d681SAndroid Build Coastguard Worker %T = xor <4 x i16> %Y, %G 20*9880d681SAndroid Build Coastguard Worker store <4 x i16>%T , <4 x i16>* undef 21*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %T 22*9880d681SAndroid Build Coastguard Worker} 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerdefine<4 x i32> @func_32_64() { 25*9880d681SAndroid Build Coastguard Worker %F = load <4 x i64>, <4 x i64>* undef 26*9880d681SAndroid Build Coastguard Worker %G = trunc <4 x i64> %F to <4 x i32> 27*9880d681SAndroid Build Coastguard Worker %H = load <4 x i64>, <4 x i64>* undef 28*9880d681SAndroid Build Coastguard Worker %Y = trunc <4 x i64> %H to <4 x i32> 29*9880d681SAndroid Build Coastguard Worker %T = or <4 x i32> %Y, %G 30*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %T 31*9880d681SAndroid Build Coastguard Worker} 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Workerdefine<4 x i8> @func_8_16() { 34*9880d681SAndroid Build Coastguard Worker %F = load <4 x i16>, <4 x i16>* undef 35*9880d681SAndroid Build Coastguard Worker %G = trunc <4 x i16> %F to <4 x i8> 36*9880d681SAndroid Build Coastguard Worker %H = load <4 x i16>, <4 x i16>* undef 37*9880d681SAndroid Build Coastguard Worker %Y = trunc <4 x i16> %H to <4 x i8> 38*9880d681SAndroid Build Coastguard Worker %T = add <4 x i8> %Y, %G 39*9880d681SAndroid Build Coastguard Worker ret <4 x i8> %T 40*9880d681SAndroid Build Coastguard Worker} 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Workerdefine<4 x i8> @func_8_32() { 43*9880d681SAndroid Build Coastguard Worker %F = load <4 x i32>, <4 x i32>* undef 44*9880d681SAndroid Build Coastguard Worker %G = trunc <4 x i32> %F to <4 x i8> 45*9880d681SAndroid Build Coastguard Worker %H = load <4 x i32>, <4 x i32>* undef 46*9880d681SAndroid Build Coastguard Worker %Y = trunc <4 x i32> %H to <4 x i8> 47*9880d681SAndroid Build Coastguard Worker %T = sub <4 x i8> %Y, %G 48*9880d681SAndroid Build Coastguard Worker ret <4 x i8> %T 49*9880d681SAndroid Build Coastguard Worker} 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Workerdefine<4 x i8> @func_8_64() { 52*9880d681SAndroid Build Coastguard Worker %F = load <4 x i64>, <4 x i64>* undef 53*9880d681SAndroid Build Coastguard Worker %G = trunc <4 x i64> %F to <4 x i8> 54*9880d681SAndroid Build Coastguard Worker %H = load <4 x i64>, <4 x i64>* undef 55*9880d681SAndroid Build Coastguard Worker %Y = trunc <4 x i64> %H to <4 x i8> 56*9880d681SAndroid Build Coastguard Worker %T = add <4 x i8> %Y, %G 57*9880d681SAndroid Build Coastguard Worker ret <4 x i8> %T 58*9880d681SAndroid Build Coastguard Worker} 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workerdefine<4 x i16> @const_16_32() { 61*9880d681SAndroid Build Coastguard Worker %G = trunc <4 x i32> <i32 0, i32 3, i32 8, i32 7> to <4 x i16> 62*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %G 63*9880d681SAndroid Build Coastguard Worker} 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Workerdefine<4 x i16> @const_16_64() { 66*9880d681SAndroid Build Coastguard Worker %G = trunc <4 x i64> <i64 0, i64 3, i64 8, i64 7> to <4 x i16> 67*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %G 68*9880d681SAndroid Build Coastguard Worker} 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Workerdefine void @bugOnTruncBitwidthReduce() nounwind { 71*9880d681SAndroid Build Coastguard Workermeh: 72*9880d681SAndroid Build Coastguard Worker %0 = xor <4 x i64> zeroinitializer, zeroinitializer 73*9880d681SAndroid Build Coastguard Worker %1 = trunc <4 x i64> %0 to <4 x i32> 74*9880d681SAndroid Build Coastguard Worker %2 = lshr <4 x i32> %1, <i32 18, i32 18, i32 18, i32 18> 75*9880d681SAndroid Build Coastguard Worker %3 = xor <4 x i32> %2, %1 76*9880d681SAndroid Build Coastguard Worker ret void 77*9880d681SAndroid Build Coastguard Worker} 78