From 9521cadff7f4f1ccc74989673d6b6a486982613c Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Mon, 11 May 2009 18:30:42 +0000 Subject: When scalarizing a vector BITCAST, check whether the operand has vector type, rather than assume that it does. If the operand is not vector, it shouldn't be run through ScalarizeVectorOp. This fixes one of the testcases in PR3886. llvm-svn: 71453 --- llvm/test/CodeGen/X86/scalarize-bitcast.ll | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 llvm/test/CodeGen/X86/scalarize-bitcast.ll (limited to 'llvm/test/CodeGen/X86/scalarize-bitcast.ll') diff --git a/llvm/test/CodeGen/X86/scalarize-bitcast.ll b/llvm/test/CodeGen/X86/scalarize-bitcast.ll new file mode 100644 index 00000000000..a07f9396040 --- /dev/null +++ b/llvm/test/CodeGen/X86/scalarize-bitcast.ll @@ -0,0 +1,29 @@ +; RUN: llvm-as < %s | llc -march=x86-64 +; PR3886 + +target 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-f80:128:128" +target triple = "x86_64-pc-linux-gnu" + +define void @mmxCombineMaskU(i32* nocapture %src, i32* nocapture %mask) nounwind { +entry: + %tmp1 = load i32* %src ; [#uses=1] + %0 = insertelement <2 x i32> undef, i32 %tmp1, i32 0 ; <<2 x i32>> [#uses=1] + %1 = insertelement <2 x i32> %0, i32 0, i32 1 ; <<2 x i32>> [#uses=1] + %conv.i.i = bitcast <2 x i32> %1 to <1 x i64> ; <<1 x i64>> [#uses=1] + %tmp2.i.i = extractelement <1 x i64> %conv.i.i, i32 0 ; [#uses=1] + %tmp22.i = bitcast i64 %tmp2.i.i to <1 x i64> ; <<1 x i64>> [#uses=1] + %tmp15.i = extractelement <1 x i64> %tmp22.i, i32 0 ; [#uses=1] + %conv.i26.i = bitcast i64 %tmp15.i to <8 x i8> ; <<8 x i8>> [#uses=1] + %shuffle.i.i = shufflevector <8 x i8> %conv.i26.i, <8 x i8> , <8 x i32> ; <<8 x i8>> [#uses=1] + %conv6.i.i = bitcast <8 x i8> %shuffle.i.i to <1 x i64> ; <<1 x i64>> [#uses=1] + %tmp12.i.i = extractelement <1 x i64> %conv6.i.i, i32 0 ; [#uses=1] + %tmp10.i = bitcast i64 %tmp12.i.i to <1 x i64> ; <<1 x i64>> [#uses=1] + %tmp24.i = extractelement <1 x i64> %tmp10.i, i32 0 ; [#uses=1] + %tmp10 = bitcast i64 %tmp24.i to <1 x i64> ; <<1 x i64>> [#uses=1] + %tmp7 = extractelement <1 x i64> %tmp10, i32 0 ; [#uses=1] + %call6 = tail call i32 (...)* @store8888(i64 %tmp7) ; [#uses=1] + store i32 %call6, i32* %src + ret void +} + +declare i32 @store8888(...) -- cgit v1.2.3