[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