Home | History | Annotate | Download | only in PowerPC
      1 ; RUN: llc -verify-machineinstrs <%s | FileCheck %s
      2 target datalayout = "e-m:e-i64:64-n32:64"
      3 target triple = "powerpc64le-unknown-linux-gnu"
      4 
      5 ; Ensure that that the  CTRLoop pass can compile intrinsics with
      6 ; non-simple arguments. eg: @llvm.sqrt.v16f64.
      7 
      8 ; Function Attrs: nounwind
      9 define void @filter_prewitt() {
     10 ; CHECK-LABEL: filter_prewitt:
     11 entry:
     12   br label %vector.body
     13 
     14 vector.body:                                      ; preds = %vector.body, %entry
     15   %wide.load = load <16 x i8>, <16 x i8>* undef, align 1, !tbaa !1, !alias.scope !4
     16   %0 = zext <16 x i8> %wide.load to <16 x i32>
     17   %wide.load279 = load <16 x i8>, <16 x i8>* undef, align 1, !tbaa !1, !alias.scope !4
     18   %1 = zext <16 x i8> %wide.load279 to <16 x i32>
     19   %2 = add nuw nsw <16 x i32> %1, %0
     20   %3 = add nuw nsw <16 x i32> %2, zeroinitializer
     21   %4 = sub nsw <16 x i32> zeroinitializer, %3
     22   %5 = add nsw <16 x i32> %4, zeroinitializer
     23   %6 = add nsw <16 x i32> %5, zeroinitializer
     24   %7 = sub nsw <16 x i32> zeroinitializer, %0
     25   %8 = sub nsw <16 x i32> %7, zeroinitializer
     26   %9 = add nsw <16 x i32> %8, zeroinitializer
     27   %10 = sub nsw <16 x i32> %9, zeroinitializer
     28   %11 = add nsw <16 x i32> %10, zeroinitializer
     29   %12 = mul nsw <16 x i32> %6, %6
     30   %13 = mul nsw <16 x i32> %11, %11
     31   %14 = add nuw nsw <16 x i32> %13, %12
     32   %15 = sitofp <16 x i32> %14 to <16 x double>
     33   %16 = call nsz <16 x double> @llvm.sqrt.v16f64(<16 x double> %15)
     34   %17 = fmul nsz <16 x double> %16, undef
     35   %18 = fadd nsz <16 x double> %17, undef
     36   %19 = fptosi <16 x double> %18 to <16 x i32>
     37   %20 = sub nsw <16 x i32> zeroinitializer, %19
     38   %21 = ashr <16 x i32> %20, <i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31>
     39   %22 = select <16 x i1> undef, <16 x i32> %21, <16 x i32> %19
     40   %23 = trunc <16 x i32> %22 to <16 x i8>
     41   store <16 x i8> %23, <16 x i8>* undef, align 1, !tbaa !1, !alias.scope !7, !noalias !9
     42   br label %vector.body
     43 }
     44 
     45 ; Function Attrs: nounwind readnone speculatable
     46 declare <16 x double> @llvm.sqrt.v16f64(<16 x double>) #1
     47 
     48 attributes #1 = { nounwind readnone speculatable }
     49 
     50 !1 = !{!2, !2, i64 0}
     51 !2 = !{!"omnipotent char", !3, i64 0}
     52 !3 = !{!"Simple C/C++ TBAA"}
     53 !4 = !{!5}
     54 !5 = distinct !{!5, !6}
     55 !6 = distinct !{!6, !"LVerDomain"}
     56 !7 = !{!8}
     57 !8 = distinct !{!8, !6}
     58 !9 = !{!10, !11, !5}
     59 !10 = distinct !{!10, !6}
     60 !11 = distinct !{!11, !6}
     61