[ARM] When a bitcast is about to be turned into a VMOVDRR, try to combine it
[oota-llvm.git] / test / CodeGen / ARM / long.ll
index 2dc14d5667ba3e47c266c9140b2e7cf92ed3b02c..1807813d93052c700b93a753a617753cfe7ccc65 100644 (file)
@@ -1,76 +1,90 @@
-; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm &&
-; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep "\-2147483648" | wc -l | grep 3 &&
-; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep "mvn" | wc -l | grep 3 &&
-; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep "adds" | wc -l | grep 1 &&
-; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep "adc" | wc -l | grep 1 &&
-; RUN: llvm-upgrade < %s | llvm-as | llc -mtriple=arm-linux | grep "subs" | wc -l | grep 1 &&
-; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep "sbc" | wc -l | grep 1 &&
-; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep "smull" | wc -l | grep 1 &&
-; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep "umull" | wc -l | grep 1
+; RUN: llc -mtriple=arm-eabi %s -o - | FileCheck %s
 
-long %f1() {
+define i64 @f1() {
+; CHECK-LABEL: f1:
 entry:
-       ret long 0
+        ret i64 0
 }
 
-long %f2() {
+define i64 @f2() {
+; CHECK-LABEL: f2:
 entry:
-       ret long 1
+        ret i64 1
 }
 
-long %f3() {
+define i64 @f3() {
+; CHECK-LABEL: f3:
+; CHECK: mvn r0, #-2147483648
 entry:
-       ret long 2147483647
+        ret i64 2147483647
 }
 
-long %f4() {
+define i64 @f4() {
+; CHECK-LABEL: f4:
+; CHECK: mov r0, #-2147483648
 entry:
-       ret long 2147483648
+        ret i64 2147483648
 }
 
-long %f5() {
+define i64 @f5() {
+; CHECK-LABEL: f5:
+; CHECK: mvn r0, #0
+; CHECK: mvn r1, #-2147483648
 entry:
-       ret long 9223372036854775807
+        ret i64 9223372036854775807
 }
 
-ulong %f6(ulong %x, ulong %y) {
+define i64 @f6(i64 %x, i64 %y) {
+; CHECK-LABEL: f6:
+; CHECK: adds
+; CHECK: adc
 entry:
-       %tmp1 = add ulong %y, 1
-       ret ulong %tmp1
+        %tmp1 = add i64 %y, 1           ; <i64> [#uses=1]
+        ret i64 %tmp1
 }
 
-void %f7() {
+define void @f7() {
+; CHECK-LABEL: f7:
 entry:
-       %tmp = call long %f8()
-       ret void
+        %tmp = call i64 @f8( )          ; <i64> [#uses=0]
+        ret void
 }
-declare long %f8()
 
-long %f9(long %a, long %b) {
+declare i64 @f8()
+
+define i64 @f9(i64 %a, i64 %b) {
+; CHECK-LABEL: f9:
+; CHECK: subs r
+; CHECK: sbc
 entry:
-       %tmp = sub long %a, %b
-       ret long %tmp
+        %tmp = sub i64 %a, %b           ; <i64> [#uses=1]
+        ret i64 %tmp
 }
 
-long %f(int %a, int %b) {
+define i64 @f(i32 %a, i32 %b) {
+; CHECK-LABEL: f:
+; CHECK: smull
 entry:
-       %tmp = cast int %a to long
-       %tmp1 = cast int %b to long
-       %tmp2 = mul long %tmp1, %tmp
-       ret long %tmp2
+        %tmp = sext i32 %a to i64               ; <i64> [#uses=1]
+        %tmp1 = sext i32 %b to i64              ; <i64> [#uses=1]
+        %tmp2 = mul i64 %tmp1, %tmp             ; <i64> [#uses=1]
+        ret i64 %tmp2
 }
 
-ulong %g(uint %a, uint %b) {
+define i64 @g(i32 %a, i32 %b) {
+; CHECK-LABEL: g:
+; CHECK: umull
 entry:
-       %tmp = cast uint %a to ulong
-       %tmp1 = cast uint %b to ulong
-       %tmp2 = mul ulong %tmp1, %tmp
-       ret ulong %tmp2
+        %tmp = zext i32 %a to i64               ; <i64> [#uses=1]
+        %tmp1 = zext i32 %b to i64              ; <i64> [#uses=1]
+        %tmp2 = mul i64 %tmp1, %tmp             ; <i64> [#uses=1]
+        ret i64 %tmp2
 }
 
-ulong %f10() {
+define i64 @f10() {
+; CHECK-LABEL: f10:
 entry:
-       %a = alloca ulong, align 8
-       %retval = load ulong* %a
-       ret ulong %retval
+        %a = alloca i64, align 8                ; <i64*> [#uses=1]
+        %retval = load i64, i64* %a          ; <i64> [#uses=1]
+        ret i64 %retval
 }