85 lines · plain
1; RUN: opt < %s -passes=instcombine -S | FileCheck %s2 3; Check all scalar / vector combinations for a pair of bitcasts.4 5define ppc_fp128 @bitcast_bitcast_s_s_s(i128 %a) {6 %bc1 = bitcast i128 %a to fp1287 %bc2 = bitcast fp128 %bc1 to ppc_fp1288 ret ppc_fp128 %bc29 10; CHECK-LABEL: @bitcast_bitcast_s_s_s(11; CHECK-NEXT: %bc2 = bitcast i128 %a to ppc_fp12812; CHECK-NEXT: ret ppc_fp128 %bc213}14 15define <2 x i32> @bitcast_bitcast_s_s_v(i64 %a) {16 %bc1 = bitcast i64 %a to double17 %bc2 = bitcast double %bc1 to <2 x i32>18 ret <2 x i32> %bc219 20; CHECK-LABEL: @bitcast_bitcast_s_s_v(21; CHECK-NEXT: %bc2 = bitcast i64 %a to <2 x i32>22; CHECK-NEXT: ret <2 x i32> %bc223}24 25define double @bitcast_bitcast_s_v_s(i64 %a) {26 %bc1 = bitcast i64 %a to <2 x i32>27 %bc2 = bitcast <2 x i32> %bc1 to double28 ret double %bc229 30; CHECK-LABEL: @bitcast_bitcast_s_v_s(31; CHECK-NEXT: %bc2 = bitcast i64 %a to double32; CHECK-NEXT: ret double %bc233}34 35define <2 x i32> @bitcast_bitcast_s_v_v(i64 %a) {36 %bc1 = bitcast i64 %a to <4 x i16>37 %bc2 = bitcast <4 x i16> %bc1 to <2 x i32>38 ret <2 x i32> %bc239 40; CHECK-LABEL: @bitcast_bitcast_s_v_v(41; CHECK-NEXT: %bc2 = bitcast i64 %a to <2 x i32>42; CHECK-NEXT: ret <2 x i32> %bc243}44 45define i64 @bitcast_bitcast_v_s_s(<2 x i32> %a) {46 %bc1 = bitcast <2 x i32> %a to double47 %bc2 = bitcast double %bc1 to i6448 ret i64 %bc249 50; CHECK-LABEL: @bitcast_bitcast_v_s_s(51; CHECK-NEXT: %bc2 = bitcast <2 x i32> %a to i6452; CHECK-NEXT: ret i64 %bc253}54 55define <4 x i16> @bitcast_bitcast_v_s_v(<2 x i32> %a) {56 %bc1 = bitcast <2 x i32> %a to double57 %bc2 = bitcast double %bc1 to <4 x i16>58 ret <4 x i16> %bc259 60; CHECK-LABEL: @bitcast_bitcast_v_s_v(61; CHECK-NEXT: %bc2 = bitcast <2 x i32> %a to <4 x i16>62; CHECK-NEXT: ret <4 x i16> %bc263}64 65define double @bitcast_bitcast_v_v_s(<2 x float> %a) {66 %bc1 = bitcast <2 x float> %a to <4 x i16>67 %bc2 = bitcast <4 x i16> %bc1 to double68 ret double %bc269 70; CHECK-LABEL: @bitcast_bitcast_v_v_s(71; CHECK-NEXT: %bc2 = bitcast <2 x float> %a to double72; CHECK-NEXT: ret double %bc273}74 75define <2 x i32> @bitcast_bitcast_v_v_v(<2 x float> %a) {76 %bc1 = bitcast <2 x float> %a to <4 x i16>77 %bc2 = bitcast <4 x i16> %bc1 to <2 x i32>78 ret <2 x i32> %bc279 80; CHECK-LABEL: @bitcast_bitcast_v_v_v(81; CHECK-NEXT: %bc2 = bitcast <2 x float> %a to <2 x i32>82; CHECK-NEXT: ret <2 x i32> %bc283}84 85