1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -instcombine -S | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; Check all scalar / vector combinations for a pair of bitcasts. 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdefine ppc_fp128 @bitcast_bitcast_s_s_s(i128 %a) { 6*9880d681SAndroid Build Coastguard Worker %bc1 = bitcast i128 %a to fp128 7*9880d681SAndroid Build Coastguard Worker %bc2 = bitcast fp128 %bc1 to ppc_fp128 8*9880d681SAndroid Build Coastguard Worker ret ppc_fp128 %bc2 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @bitcast_bitcast_s_s_s( 11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %bc2 = bitcast i128 %a to ppc_fp128 12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret ppc_fp128 %bc2 13*9880d681SAndroid Build Coastguard Worker} 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @bitcast_bitcast_s_s_v(i64 %a) { 16*9880d681SAndroid Build Coastguard Worker %bc1 = bitcast i64 %a to double 17*9880d681SAndroid Build Coastguard Worker %bc2 = bitcast double %bc1 to <2 x i32> 18*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %bc2 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @bitcast_bitcast_s_s_v( 21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %bc2 = bitcast i64 %a to <2 x i32> 22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i32> %bc2 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerdefine double @bitcast_bitcast_s_v_s(i64 %a) { 26*9880d681SAndroid Build Coastguard Worker %bc1 = bitcast i64 %a to <2 x i32> 27*9880d681SAndroid Build Coastguard Worker %bc2 = bitcast <2 x i32> %bc1 to double 28*9880d681SAndroid Build Coastguard Worker ret double %bc2 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @bitcast_bitcast_s_v_s( 31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %bc2 = bitcast i64 %a to double 32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret double %bc2 33*9880d681SAndroid Build Coastguard Worker} 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @bitcast_bitcast_s_v_v(i64 %a) { 36*9880d681SAndroid Build Coastguard Worker %bc1 = bitcast i64 %a to <4 x i16> 37*9880d681SAndroid Build Coastguard Worker %bc2 = bitcast <4 x i16> %bc1 to <2 x i32> 38*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %bc2 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @bitcast_bitcast_s_v_v( 41*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %bc2 = bitcast i64 %a to <2 x i32> 42*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i32> %bc2 43*9880d681SAndroid Build Coastguard Worker} 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Workerdefine i64 @bitcast_bitcast_v_s_s(<2 x i32> %a) { 46*9880d681SAndroid Build Coastguard Worker %bc1 = bitcast <2 x i32> %a to double 47*9880d681SAndroid Build Coastguard Worker %bc2 = bitcast double %bc1 to i64 48*9880d681SAndroid Build Coastguard Worker ret i64 %bc2 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @bitcast_bitcast_v_s_s( 51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %bc2 = bitcast <2 x i32> %a to i64 52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i64 %bc2 53*9880d681SAndroid Build Coastguard Worker} 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @bitcast_bitcast_v_s_v(<2 x i32> %a) { 56*9880d681SAndroid Build Coastguard Worker %bc1 = bitcast <2 x i32> %a to double 57*9880d681SAndroid Build Coastguard Worker %bc2 = bitcast double %bc1 to <4 x i16> 58*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %bc2 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @bitcast_bitcast_v_s_v( 61*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %bc2 = bitcast <2 x i32> %a to <4 x i16> 62*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <4 x i16> %bc2 63*9880d681SAndroid Build Coastguard Worker} 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Workerdefine double @bitcast_bitcast_v_v_s(<2 x float> %a) { 66*9880d681SAndroid Build Coastguard Worker %bc1 = bitcast <2 x float> %a to <4 x i16> 67*9880d681SAndroid Build Coastguard Worker %bc2 = bitcast <4 x i16> %bc1 to double 68*9880d681SAndroid Build Coastguard Worker ret double %bc2 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @bitcast_bitcast_v_v_s( 71*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %bc2 = bitcast <2 x float> %a to double 72*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret double %bc2 73*9880d681SAndroid Build Coastguard Worker} 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @bitcast_bitcast_v_v_v(<2 x float> %a) { 76*9880d681SAndroid Build Coastguard Worker %bc1 = bitcast <2 x float> %a to <4 x i16> 77*9880d681SAndroid Build Coastguard Worker %bc2 = bitcast <4 x i16> %bc1 to <2 x i32> 78*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %bc2 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @bitcast_bitcast_v_v_v( 81*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %bc2 = bitcast <2 x float> %a to <2 x i32> 82*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i32> %bc2 83*9880d681SAndroid Build Coastguard Worker} 84*9880d681SAndroid Build Coastguard Worker 85