new bswap idiom
authorChris Lattner <sabre@nondot.org>
Wed, 29 Nov 2006 07:21:08 +0000 (07:21 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 29 Nov 2006 07:21:08 +0000 (07:21 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32012 91177308-0d34-0410-b5e6-96231b3b80d8

test/Transforms/InstCombine/bswap.ll

index 6f434e3f278e7b8e1fa26aa947fd6f9267619ece..87caf292527e7f07fbbefd065f4aa7955323cd88 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep 'call.*llvm.bswap' | wc -l | grep 4
+; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep 'call.*llvm.bswap' | wc -l | grep 5
 
 uint %test1(uint %i) {
         %tmp1 = shr uint %i, ubyte 24           ; <uint> [#uses=1]
@@ -40,3 +40,22 @@ ushort %test4(ushort %s) {
        ret ushort %tmp5
 }
 
+; unsigned short test5(unsigned short a) {
+;       return ((a & 0xff00) >> 8 | (a & 0x00ff) << 8);
+;}
+ushort %test5(ushort %a) {
+        %tmp = zext ushort %a to int
+        %tmp1 = and int %tmp, 65280
+        %tmp2 = ashr int %tmp1, ubyte 8
+        %tmp2 = trunc int %tmp2 to short
+        %tmp3 = zext ushort %a to int
+        %tmp4 = and int %tmp3, 255
+        %tmp5 = shl int %tmp4, ubyte 8
+        %tmp5 = trunc int %tmp5 to short
+        %tmp = or short %tmp2, %tmp5
+        %tmp6 = bitcast short %tmp to ushort
+        %tmp6 = zext ushort %tmp6 to int
+        %retval = trunc int %tmp6 to ushort
+        ret ushort %retval
+}
+