Changes in directory llvm-test/SingleSource/UnitTests/SignlessTypes:

Makefile added (r1.1)
div.c added (r1.1)
---
Log message:

Add a unit test directory for testing basic operations affected by the
Signless Types feature. This unit tests are aimed at making sure that
various InstCombine transforms continue to work correctly after the
SignlessTypes feature is implemented.


---
Diffs of the changes:  (+63 -0)

 Makefile |    5 +++++
 div.c    |   58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 63 insertions(+)


Index: llvm-test/SingleSource/UnitTests/SignlessTypes/Makefile
diff -c /dev/null llvm-test/SingleSource/UnitTests/SignlessTypes/Makefile:1.1
*** /dev/null   Tue Oct 24 19:27:58 2006
--- llvm-test/SingleSource/UnitTests/SignlessTypes/Makefile     Tue Oct 24 
19:27:48 2006
***************
*** 0 ****
--- 1,5 ----
+ # SingleSource/UnitTests/Vector/Makefile
+ LEVEL = ../../..
+ 
+ include $(LEVEL)/Makefile.config
+ include $(LEVEL)/SingleSource/Makefile.singlesrc


Index: llvm-test/SingleSource/UnitTests/SignlessTypes/div.c
diff -c /dev/null llvm-test/SingleSource/UnitTests/SignlessTypes/div.c:1.1
*** /dev/null   Tue Oct 24 19:28:03 2006
--- llvm-test/SingleSource/UnitTests/SignlessTypes/div.c        Tue Oct 24 
19:27:48 2006
***************
*** 0 ****
--- 1,58 ----
+ /* 
+  * This file is used to test division operations in conjunction with
+  * the Signless Types feature. The DIV instruction was replaced with
+  * UDIV, SDIV and FDIV instructions. The tests here are aimed at
+  * triggering InstructionCombining transforms to exercise them and
+  * ensure they are not altering the computed values.
+  */
+ 
+ #include <stdio.h>
+ 
+ unsigned 
+ udivTest1(unsigned X, unsigned Y) {
+ 
+   unsigned Tally = 0;
+   /* 0 / X == 0 */
+   Tally += 0 / X;
+ 
+   /* div X, 1 == X */
+   Tally += X / 1;
+ 
+   /* div X, -1 == -X */
+   Tally += X / -1;
+ 
+   /* div X, (Cond ? 0 : Y) -> div X, Y.  */
+   Tally += ( X == Y ? 0 : Y );
+   Tally += ( X == Y ? ((unsigned)0) : Y );
+ 
+   /* div X, (Cond ? Y : 0) -> div X, Y */
+   Tally += ( X != Y ? Y : 0 );
+   Tally += ( X != Y ? Y : ((unsigned)0) );
+ 
+   /* (X / C1) / C2  -> X / (C1*C2) */
+   Tally += ( X / 2 ) / 4;
+   Tally += ( X / ((unsigned)2)) / ((unsigned)4);
+ 
+   /* X udiv C^2 -> X >> C */
+   Tally += X / 4;
+   Tally += X / ((unsigned)4);
+ 
+   /* X udiv (C1 << N), where C1 is "1<<C2"  -->  X >> (N+C2) */
+   Tally += X / (4 << Y);
+   Tally += X / (((unsigned)4) << Y);
+ 
+   /* udiv X, (Select Cond, C1, C2) --> Select Cond, (shr X, C1), (shr X, C2) 
*/
+   Tally += X / (X == Y, 2, 4);
+   Tally += X / (X == Y, ((unsigned)2), ((unsigned)4));
+ 
+   /* -X/C -> X/-C */
+   Tally += -X / 2;
+   Tally += -X / ((unsigned)2);
+ 
+   return Tally;
+ }
+ 
+ int main(int argc, char**argv) {
+   unsigned result = udivTest1(42, 3);
+   printf("udivTest1(42,17) = %u\n", udivTest1(42,17));
+ }



_______________________________________________
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

Reply via email to