[llvm-commits] CVS: llvm/test/Regression/Transforms/ScalarRepl/vector_promote.ll
Chris Lattner
lattner at cs.uiuc.edu
Fri Apr 14 14:42:06 PDT 2006
Changes in directory llvm/test/Regression/Transforms/ScalarRepl:
vector_promote.ll added (r1.1)
---
Log message:
New testcase, checking to see we can turn this code:
void test(vector float *F, float f) {
vector float G = *F + *F;
*((float*)&G) = f;
*F = G + G;
}
void test2(vector float *F, float f) {
vector float G = *F + *F;
((float*)&G)[2] = f;
*F = G + G;
}
void test3(vector float *F, float *f) {
vector float G = *F + *F;
*f = ((float*)&G)[2];
}
void test4(vector float *F, float *f) {
vector float G = *F + *F;
*f = *((float*)&G);
}
into insert/extract element operations with no memory traffic.
---
Diffs of the changes: (+56 -0)
vector_promote.ll | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 56 insertions(+)
Index: llvm/test/Regression/Transforms/ScalarRepl/vector_promote.ll
diff -c /dev/null llvm/test/Regression/Transforms/ScalarRepl/vector_promote.ll:1.1
*** /dev/null Fri Apr 14 16:42:04 2006
--- llvm/test/Regression/Transforms/ScalarRepl/vector_promote.ll Fri Apr 14 16:41:54 2006
***************
*** 0 ****
--- 1,56 ----
+
+ ; RUN: llvm-as < %s | opt -scalarrepl -disable-output &&
+ ; RUN: llvm-as < %s | opt -scalarrepl | llvm-dis | not grep alloca
+
+ void %test(<4 x float>* %F, float %f) {
+ entry:
+ %G = alloca <4 x float>, align 16 ; <<4 x float>*> [#uses=3]
+ %tmp = load <4 x float>* %F ; <<4 x float>> [#uses=2]
+ %tmp3 = add <4 x float> %tmp, %tmp ; <<4 x float>> [#uses=1]
+ store <4 x float> %tmp3, <4 x float>* %G
+ %G = getelementptr <4 x float>* %G, int 0, int 0 ; <float*> [#uses=1]
+ store float %f, float* %G
+ %tmp4 = load <4 x float>* %G ; <<4 x float>> [#uses=2]
+ %tmp6 = add <4 x float> %tmp4, %tmp4 ; <<4 x float>> [#uses=1]
+ store <4 x float> %tmp6, <4 x float>* %F
+ ret void
+ }
+
+ void %test2(<4 x float>* %F, float %f) {
+ entry:
+ %G = alloca <4 x float>, align 16 ; <<4 x float>*> [#uses=3]
+ %tmp = load <4 x float>* %F ; <<4 x float>> [#uses=2]
+ %tmp3 = add <4 x float> %tmp, %tmp ; <<4 x float>> [#uses=1]
+ store <4 x float> %tmp3, <4 x float>* %G
+ %tmp = getelementptr <4 x float>* %G, int 0, int 2 ; <float*> [#uses=1]
+ store float %f, float* %tmp
+ %tmp4 = load <4 x float>* %G ; <<4 x float>> [#uses=2]
+ %tmp6 = add <4 x float> %tmp4, %tmp4 ; <<4 x float>> [#uses=1]
+ store <4 x float> %tmp6, <4 x float>* %F
+ ret void
+ }
+
+ void %test3(<4 x float>* %F, float* %f) {
+ entry:
+ %G = alloca <4 x float>, align 16 ; <<4 x float>*> [#uses=2]
+ %tmp = load <4 x float>* %F ; <<4 x float>> [#uses=2]
+ %tmp3 = add <4 x float> %tmp, %tmp ; <<4 x float>> [#uses=1]
+ store <4 x float> %tmp3, <4 x float>* %G
+ %tmp = getelementptr <4 x float>* %G, int 0, int 2 ; <float*> [#uses=1]
+ %tmp = load float* %tmp ; <float> [#uses=1]
+ store float %tmp, float* %f
+ ret void
+ }
+
+ void %test4(<4 x float>* %F, float* %f) {
+ entry:
+ %G = alloca <4 x float>, align 16 ; <<4 x float>*> [#uses=2]
+ %tmp = load <4 x float>* %F ; <<4 x float>> [#uses=2]
+ %tmp3 = add <4 x float> %tmp, %tmp ; <<4 x float>> [#uses=1]
+ store <4 x float> %tmp3, <4 x float>* %G
+ %G = getelementptr <4 x float>* %G, int 0, int 0 ; <float*> [#uses=1]
+ %tmp = load float* %G ; <float> [#uses=1]
+ store float %tmp, float* %f
+ ret void
+ }
+
More information about the llvm-commits
mailing list