Fix mapping of @llvm.arm.ssat/usat intrinsics to ssat/usat instructions for Thumb2
[oota-llvm.git] / test / CodeGen / ARM / divmod-eabi.ll
index ab98491ec342bda56f70d566e8842baf114e0ea0..4178af397e66f745b3e5f7fa6bc4c2971428f380 100644 (file)
@@ -1,11 +1,16 @@
 ; RUN: llc -mtriple armv7-none-eabi %s -o - | FileCheck %s --check-prefix=EABI
+; RUN: llc -mtriple armv7-none-eabihf %s -o - | FileCheck %s --check-prefix=EABI
+; Both "none-eabi" and "androideabi" must lower SREM/UREM to __aeabi_{u,i}divmod
+; RUN: llc -mtriple armv7-linux-androideabi %s -o - | FileCheck %s --check-prefix=EABI
 ; RUN: llc -mtriple armv7-linux-gnueabi %s -o - | FileCheck %s --check-prefix=GNU
 ; RUN: llc -mtriple armv7-apple-darwin %s -o - | FileCheck %s --check-prefix=DARWIN
+; FIXME: long-term, we will use "-apple-macho" and won't need this exception:
+; RUN: llc -mtriple armv7-apple-darwin-eabi %s -o - | FileCheck %s --check-prefix=DARWIN
 
 define signext i16 @f16(i16 signext %a, i16 signext %b) {
-; EABI: f16:
-; GNU: f16:
-; DARWIN: f16:
+; EABI-LABEL: f16:
+; GNU-LABEL: f16:
+; DARWIN-LABEL: f16:
 entry:
   %conv = sext i16 %a to i32
   %conv1 = sext i16 %b to i32
@@ -39,9 +44,9 @@ entry:
 }
 
 define i32 @f32(i32 %a, i32 %b) {
-; EABI: f32:
-; GNU: f32:
-; DARWIN: f32:
+; EABI-LABEL: f32:
+; GNU-LABEL: f32:
+; DARWIN-LABEL: f32:
 entry:
   %div = sdiv i32 %a, %b
   %rem = srem i32 %a, %b
@@ -69,9 +74,9 @@ entry:
 }
 
 define i32 @uf(i32 %a, i32 %b) {
-; EABI: uf:
-; GNU: uf:
-; DARWIN: uf:
+; EABI-LABEL: uf:
+; GNU-LABEL: uf:
+; DARWIN-LABEL: uf:
 entry:
   %div = udiv i32 %a, %b
   %rem = urem i32 %a, %b
@@ -98,9 +103,9 @@ entry:
 
 ; FIXME: AEABI is not lowering long u/srem into u/ldivmod
 define i64 @longf(i64 %a, i64 %b) {
-; EABI: longf:
-; GNU: longf:
-; DARWIN: longf:
+; EABI-LABEL: longf:
+; GNU-LABEL: longf:
+; DARWIN-LABEL: longf:
 entry:
   %div = sdiv i64 %a, %b
   %rem = srem i64 %a, %b
@@ -121,9 +126,9 @@ entry:
 }
 
 define i32 @g1(i32 %a, i32 %b) {
-; EABI: g1:
-; GNU: g1:
-; DARWIN: g1:
+; EABI-LABEL: g1:
+; GNU-LABEL: g1:
+; DARWIN-LABEL: g1:
 entry:
   %div = sdiv i32 %a, %b
   %rem = srem i32 %a, %b
@@ -143,9 +148,9 @@ entry:
 
 ; On both Darwin and Gnu, this is just a call to __modsi3
 define i32 @g2(i32 %a, i32 %b) {
-; EABI: g2:
-; GNU: g2:
-; DARWIN: g2:
+; EABI-LABEL: g2:
+; GNU-LABEL: g2:
+; DARWIN-LABEL: g2:
 entry:
   %rem = srem i32 %a, %b
 ; EABI: __aeabi_idivmod
@@ -156,9 +161,9 @@ entry:
 }
 
 define i32 @g3(i32 %a, i32 %b) {
-; EABI: g3:
-; GNU: g3:
-; DARWIN: g3:
+; EABI-LABEL: g3:
+; GNU-LABEL: g3:
+; DARWIN-LABEL: g3:
 entry:
   %rem = srem i32 %a, %b
 ; EABI: __aeabi_idivmod
@@ -179,14 +184,14 @@ entry:
 }
 
 define i32 @g4(i32 %a, i32 %b) {
-; EABI: g4:
-; GNU: g4:
-; DARWIN: g4:
+; EABI-LABEL: g4:
+; GNU-LABEL: g4:
+; DARWIN-LABEL: g4:
 entry:
   %div = sdiv i32 %a, %b
-; EABI: __aeabi_idivmod
+; EABI: __aeabi_idiv{{$}}
 ; EABI: mov [[div:r[0-9]+]], r0
-; GNU __aeabi_idiv
+; GNU: __aeabi_idiv
 ; GNU: mov [[sum:r[0-9]+]], r0
 ; DARWIN: ___divsi3
 ; DARWIN: mov [[sum:r[0-9]+]], r0