Home | History | Annotate | Download | only in AArch64
      1 ; RUN: llc -mtriple=aarch64-apple-darwin -O0 -fast-isel-abort=1 -verify-machineinstrs < %s
      2 
      3 ; Test that we don't fold the shift.
      4 define i64 @fold_shift_test(i64 %a, i1 %c) {
      5   %1 = sub i64 %a, 8
      6   %2 = ashr i64 %1, 3
      7   br i1 %c, label %bb1, label %bb2
      8 bb1:
      9   %3 = icmp ult i64 0, %2
     10   br i1 %3, label %bb2, label %bb3
     11 bb2:
     12   ret i64 1
     13 bb3:
     14   ret i64 2
     15 }
     16 
     17 ; Test that we don't fold the sign-extend.
     18 define i64 @fold_sext_test1(i32 %a, i1 %c) {
     19   %1 = sub i32 %a, 8
     20   %2 = sext i32 %1 to i64
     21   br i1 %c, label %bb1, label %bb2
     22 bb1:
     23   %3 = icmp ult i64 0, %2
     24   br i1 %3, label %bb2, label %bb3
     25 bb2:
     26   ret i64 1
     27 bb3:
     28   ret i64 2
     29 }
     30 
     31 ; Test that we don't fold the sign-extend.
     32 define i64 @fold_sext_test2(i32 %a, i1 %c) {
     33   %1 = sub i32 %a, 8
     34   %2 = sext i32 %1 to i64
     35   br i1 %c, label %bb1, label %bb2
     36 bb1:
     37   %3 = shl i64 %2, 4
     38   ret i64 %3
     39 bb2:
     40   ret i64 %2
     41 }
     42 
     43 ; Test that we clear the kill flag.
     44 define i32 @fold_kill_test(i32 %a) {
     45   %1 = sub i32 %a, 8
     46   %2 = shl i32 %1, 3
     47   %3 = icmp ult i32 0, %2
     48   br i1 %3, label %bb1, label %bb2
     49 bb1:
     50   ret i32 %2
     51 bb2:
     52   %4 = add i32 %2, 4
     53   ret i32 %4
     54 }
     55