Test 221067 in a fixed-target test so as not to fail on targets with different DWARF...
[oota-llvm.git] / test / CodeGen / AArch64 / fast-isel-shift.ll
index 2a4fffcf0f9ab420ca0e2bb190f505fae3eeb462..e4a3b860d2e03dec721cdc772635a018930d4736 100644 (file)
@@ -1,5 +1,53 @@
 ; RUN: llc -fast-isel -fast-isel-abort -mtriple=arm64-apple-darwin -verify-machineinstrs < %s | FileCheck %s
 
+; CHECK-LABEL: lsl_zext_i1_i16
+; CHECK:       ubfiz {{w[0-9]*}}, {{w[0-9]*}}, #4, #1
+define zeroext i16 @lsl_zext_i1_i16(i1 %b) {
+  %1 = zext i1 %b to i16
+  %2 = shl i16 %1, 4
+  ret i16 %2
+}
+
+; CHECK-LABEL: lsl_sext_i1_i16
+; CHECK:       sbfiz {{w[0-9]*}}, {{w[0-9]*}}, #4, #1
+define signext i16 @lsl_sext_i1_i16(i1 %b) {
+  %1 = sext i1 %b to i16
+  %2 = shl i16 %1, 4
+  ret i16 %2
+}
+
+; CHECK-LABEL: lsl_zext_i1_i32
+; CHECK:       ubfiz {{w[0-9]*}}, {{w[0-9]*}}, #4, #1
+define i32 @lsl_zext_i1_i32(i1 %b) {
+  %1 = zext i1 %b to i32
+  %2 = shl i32 %1, 4
+  ret i32 %2
+}
+
+; CHECK-LABEL: lsl_sext_i1_i32
+; CHECK:       sbfiz {{w[0-9]*}}, {{w[0-9]*}}, #4, #1
+define i32 @lsl_sext_i1_i32(i1 %b) {
+  %1 = sext i1 %b to i32
+  %2 = shl i32 %1, 4
+  ret i32 %2
+}
+
+; CHECK-LABEL: lsl_zext_i1_i64
+; CHECK:       ubfiz {{x[0-9]*}}, {{x[0-9]*}}, #4, #1
+define i64 @lsl_zext_i1_i64(i1 %b) {
+  %1 = zext i1 %b to i64
+  %2 = shl i64 %1, 4
+  ret i64 %2
+}
+
+; CHECK-LABEL: lsl_sext_i1_i64
+; CHECK:       sbfiz {{x[0-9]*}}, {{x[0-9]*}}, #4, #1
+define i64 @lsl_sext_i1_i64(i1 %b) {
+  %1 = sext i1 %b to i64
+  %2 = shl i64 %1, 4
+  ret i64 %2
+}
+
 ; CHECK-LABEL: lslv_i8
 ; CHECK:       and [[REG1:w[0-9]+]], w1, #0xff
 ; CHECK-NEXT:  lsl [[REG2:w[0-9]+]], w0, [[REG1]]
@@ -48,18 +96,16 @@ define i32 @lsl_sext_i8_i32(i8 %b) {
   ret i32 %2
 }
 
-; FIXME: Cannot test this yet, because the target-independent instruction
-; selector handles this.
 ; CHECK-LABEL: lsl_zext_i8_i64
+; CHECK:       ubfiz {{x[0-9]*}}, {{x[0-9]*}}, #4, #8
 define i64 @lsl_zext_i8_i64(i8 %b) {
   %1 = zext i8 %b to i64
   %2 = shl i64 %1, 4
   ret i64 %2
 }
 
-; FIXME: Cannot test this yet, because the target-independent instruction
-; selector handles this.
 ; CHECK-LABEL: lsl_sext_i8_i64
+; CHECK:       sbfiz {{x[0-9]*}}, {{x[0-9]*}}, #4, #8
 define i64 @lsl_sext_i8_i64(i8 %b) {
   %1 = sext i8 %b to i64
   %2 = shl i64 %1, 4
@@ -98,18 +144,16 @@ define i32 @lsl_sext_i16_i32(i16 %b) {
   ret i32 %2
 }
 
-; FIXME: Cannot test this yet, because the target-independent instruction
-; selector handles this.
 ; CHECK-LABEL: lsl_zext_i16_i64
+; CHECK:       ubfiz {{x[0-9]*}}, {{x[0-9]*}}, #8, #16
 define i64 @lsl_zext_i16_i64(i16 %b) {
   %1 = zext i16 %b to i64
   %2 = shl i64 %1, 8
   ret i64 %2
 }
 
-; FIXME: Cannot test this yet, because the target-independent instruction
-; selector handles this.
 ; CHECK-LABEL: lsl_sext_i16_i64
+; CHECK:       sbfiz {{x[0-9]*}}, {{x[0-9]*}}, #8, #16
 define i64 @lsl_sext_i16_i64(i16 %b) {
   %1 = sext i16 %b to i64
   %2 = shl i64 %1, 8
@@ -130,26 +174,22 @@ define zeroext i32 @lsl_i32(i32 %a) {
   ret i32 %1
 }
 
-; FIXME: Cannot test this yet, because the target-independent instruction
-; selector handles this.
 ; CHECK-LABEL: lsl_zext_i32_i64
+; CHECK:       ubfiz {{x[0-9]+}}, {{x[0-9]+}}, #16, #32
 define i64 @lsl_zext_i32_i64(i32 %b) {
   %1 = zext i32 %b to i64
   %2 = shl i64 %1, 16
   ret i64 %2
 }
 
-; FIXME: Cannot test this yet, because the target-independent instruction
-; selector handles this.
 ; CHECK-LABEL: lsl_sext_i32_i64
+; CHECK:       sbfiz {{x[0-9]+}}, {{x[0-9]+}}, #16, #32
 define i64 @lsl_sext_i32_i64(i32 %b) {
   %1 = sext i32 %b to i64
   %2 = shl i64 %1, 16
   ret i64 %2
 }
 
-; FIXME: Cannot test this yet, because the target-independent instruction
-; selector handles this.
 ; CHECK-LABEL: lslv_i64
 ; CHECK:       lsl {{x[0-9]*}}, x0, x1
 define i64 @lslv_i64(i64 %a, i64 %b) {
@@ -157,9 +197,8 @@ define i64 @lslv_i64(i64 %a, i64 %b) {
   ret i64 %1
 }
 
-; FIXME: This shouldn't use the variable shift version.
 ; CHECK-LABEL: lsl_i64
-; CHECK:       lsl {{x[0-9]*}}, {{x[0-9]*}}, {{x[0-9]*}}
+; CHECK:       lsl {{x[0-9]*}}, {{x[0-9]*}}, #32
 define i64 @lsl_i64(i64 %a) {
   %1 = shl i64 %a, 32
   ret i64 %1
@@ -254,9 +293,8 @@ define i64 @lsrv_i64(i64 %a, i64 %b) {
   ret i64 %1
 }
 
-; FIXME: This shouldn't use the variable shift version.
 ; CHECK-LABEL: lsr_i64
-; CHECK:       lsr {{x[0-9]*}}, {{x[0-9]*}}, {{x[0-9]*}}
+; CHECK:       lsr {{x[0-9]*}}, {{x[0-9]*}}, #32
 define i64 @lsr_i64(i64 %a) {
   %1 = lshr i64 %a, 32
   ret i64 %1
@@ -349,9 +387,8 @@ define i64 @asrv_i64(i64 %a, i64 %b) {
   ret i64 %1
 }
 
-; FIXME: This shouldn't use the variable shift version.
 ; CHECK-LABEL: asr_i64
-; CHECK:       asr {{x[0-9]*}}, {{x[0-9]*}}, {{x[0-9]*}}
+; CHECK:       asr {{x[0-9]*}}, {{x[0-9]*}}, #32
 define i64 @asr_i64(i64 %a) {
   %1 = ashr i64 %a, 32
   ret i64 %1