Changeset View
Changeset View
Standalone View
Standalone View
llvm/test/Transforms/SLPVectorizer/X86/load-merge-inseltpoison.ll
Show First 20 Lines • Show All 48 Lines • ▼ Show 20 Lines | entry: | ||||
ret i32 %or11 | ret i32 %or11 | ||||
} | } | ||||
define <4 x float> @PR16739_byref(<4 x float>* nocapture readonly dereferenceable(16) %x) { | define <4 x float> @PR16739_byref(<4 x float>* nocapture readonly dereferenceable(16) %x) { | ||||
; CHECK-LABEL: @PR16739_byref( | ; CHECK-LABEL: @PR16739_byref( | ||||
; CHECK-NEXT: [[GEP0:%.*]] = getelementptr inbounds <4 x float>, <4 x float>* [[X:%.*]], i64 0, i64 0 | ; CHECK-NEXT: [[GEP0:%.*]] = getelementptr inbounds <4 x float>, <4 x float>* [[X:%.*]], i64 0, i64 0 | ||||
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr inbounds <4 x float>, <4 x float>* [[X]], i64 0, i64 1 | ; CHECK-NEXT: [[GEP1:%.*]] = getelementptr inbounds <4 x float>, <4 x float>* [[X]], i64 0, i64 1 | ||||
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr inbounds <4 x float>, <4 x float>* [[X]], i64 0, i64 2 | ; CHECK-NEXT: [[GEP2:%.*]] = getelementptr inbounds <4 x float>, <4 x float>* [[X]], i64 0, i64 2 | ||||
; CHECK-NEXT: [[TMP1:%.*]] = bitcast float* [[GEP0]] to <2 x float>* | ; CHECK-NEXT: [[X0:%.*]] = load float, float* [[GEP0]], align 4 | ||||
; CHECK-NEXT: [[TMP1:%.*]] = bitcast float* [[GEP1]] to <2 x float>* | |||||
; CHECK-NEXT: [[TMP2:%.*]] = load <2 x float>, <2 x float>* [[TMP1]], align 4 | ; CHECK-NEXT: [[TMP2:%.*]] = load <2 x float>, <2 x float>* [[TMP1]], align 4 | ||||
; CHECK-NEXT: [[X2:%.*]] = load float, float* [[GEP2]], align 4 | ; CHECK-NEXT: [[I0:%.*]] = insertelement <4 x float> poison, float [[X0]], i32 0 | ||||
; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <2 x float> [[TMP2]], <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef> | ; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <2 x float> [[TMP2]], <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef> | ||||
; CHECK-NEXT: [[I2:%.*]] = insertelement <4 x float> [[TMP3]], float [[X2]], i32 2 | ; CHECK-NEXT: [[I21:%.*]] = shufflevector <4 x float> [[I0]], <4 x float> [[TMP3]], <4 x i32> <i32 0, i32 4, i32 5, i32 3> | ||||
; CHECK-NEXT: [[I3:%.*]] = insertelement <4 x float> [[I2]], float [[X2]], i32 3 | ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <2 x float> [[TMP2]], i32 1 | ||||
; CHECK-NEXT: [[I3:%.*]] = insertelement <4 x float> [[I21]], float [[TMP4]], i32 3 | |||||
; CHECK-NEXT: ret <4 x float> [[I3]] | ; CHECK-NEXT: ret <4 x float> [[I3]] | ||||
; | ; | ||||
%gep0 = getelementptr inbounds <4 x float>, <4 x float>* %x, i64 0, i64 0 | %gep0 = getelementptr inbounds <4 x float>, <4 x float>* %x, i64 0, i64 0 | ||||
%gep1 = getelementptr inbounds <4 x float>, <4 x float>* %x, i64 0, i64 1 | %gep1 = getelementptr inbounds <4 x float>, <4 x float>* %x, i64 0, i64 1 | ||||
%gep2 = getelementptr inbounds <4 x float>, <4 x float>* %x, i64 0, i64 2 | %gep2 = getelementptr inbounds <4 x float>, <4 x float>* %x, i64 0, i64 2 | ||||
%x0 = load float, float* %gep0 | %x0 = load float, float* %gep0 | ||||
%x1 = load float, float* %gep1 | %x1 = load float, float* %gep1 | ||||
%x2 = load float, float* %gep2 | %x2 = load float, float* %gep2 | ||||
▲ Show 20 Lines • Show All 129 Lines • Show Last 20 Lines |