brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.2 KiB · f62e7f1 Raw
127 lines · plain
1; Test that loops with sufficient registers do not reload or spill on2; stack. These cases include calls and it is necessary to have the GR128 /3; FP128 registers part of the callee saved registers list in order to avoid4; spilling / reloading.5;6; RUN: llc -switch-peel-threshold=101 < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s7 8%0 = type { ptr, ptr, ptr, i32, ptr, i64, i64, i64, i64, i64, i64, %2, %5, %7 }9%1 = type { i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr }10%2 = type { i64, i64, ptr }11%3 = type { ptr, i64 }12%4 = type { i64, ptr }13%5 = type { i64, i64, ptr }14%6 = type { i64, ptr, i32, i64, ptr }15%7 = type { i64, i64, ptr }16%8 = type { i64, ptr, ptr, ptr, i64, ptr, %5, i32, i64, i64 }17 18declare void @llvm.memcpy.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1)19 20define void @fun0(ptr) {21; CHECK-LABEL: .LBB0_422; CHECK: =>  This Inner Loop Header23; CHECK-NOT: 16-byte Folded Spill24; CHECK-NOT: 16-byte Folded Reload25 26  %2 = load i64, ptr undef, align 827  %3 = udiv i64 128, %228  %4 = mul i64 %3, %229  %5 = load i64, ptr undef, align 830  switch i32 undef, label %36 [31    i32 1, label %632    i32 2, label %733    i32 3, label %834    i32 4, label %935    i32 5, label %1036    i32 6, label %1137  ]38 39; <label>:6:                                      ; preds = %140  br label %1241 42; <label>:7:                                      ; preds = %143  br label %1244 45; <label>:8:                                      ; preds = %146  unreachable47 48; <label>:9:                                      ; preds = %149  unreachable50 51; <label>:10:                                     ; preds = %152  unreachable53 54; <label>:11:                                     ; preds = %155  unreachable56 57; <label>:12:                                     ; preds = %7, %658  %13 = getelementptr inbounds %0, ptr %0, i64 0, i32 559  br label %1460 61; <label>:14:                                     ; preds = %31, %1262  %15 = phi i64 [ undef, %31 ], [ %5, %12 ]63  %16 = phi i64 [ %35, %31 ], [ undef, %12 ]64  %17 = load i64, ptr %13, align 865  %18 = icmp ult i64 %15, %1766  %19 = select i1 %18, i64 %15, i64 %1767  %20 = udiv i64 %19, %468  %21 = icmp ugt i64 %20, 169  %22 = select i1 %21, i64 %20, i64 170  %23 = sub i64 %22, 071  br label %2472 73; <label>:24:                                     ; preds = %24, %1474  %25 = phi i64 [ %23, %14 ], [ %27, %24 ]75  call void @llvm.memcpy.p0.p0.i64(ptr undef, ptr nonnull undef, i64 %4, i1 false)76  %26 = getelementptr inbounds i8, ptr null, i64 %477  store ptr %26, ptr undef, align 878  %27 = add i64 %25, -479  %28 = icmp eq i64 %27, 080  br i1 %28, label %31, label %2481 82; <label>:29:                                     ; preds = %2483  br i1 undef, label %31, label %3084 85; <label>:30:                                     ; preds = %2986  call void @llvm.memcpy.p0.p0.i64(ptr %26, ptr nonnull undef, i64 %4, i1 false)87  br label %3188 89; <label>:31:                                     ; preds = %30, %2990  %32 = call signext i32 undef(ptr undef, i64 %16, i32 signext 8)91  %33 = icmp eq i64 undef, 092  %34 = select i1 %33, i64 0, i64 %1993  %35 = add i64 %34, %1694  br i1 %33, label %36, label %1495 96; <label>:36:                                     ; preds = %31, %197  ret void98}99 100declare fp128 @llvm.pow.f128(fp128, fp128)101 102define void @fun1(ptr) {103; CHECK-LABEL: .LBB1_2104; CHECK: =>This Inner Loop Header: Depth=1105; CHECK-NOT: 16-byte Folded Spill106; CHECK-NOT: 16-byte Folded Reload107; CHECK-LABEL: .LBB1_3108 109  br i1 undef, label %7, label %2110 111; <label>:2:                                      ; preds = %2, %1112  %3 = phi fp128 [ %5, %2 ], [ 0xL00000000000000000000000000000000, %1 ]113  %4 = tail call fp128 @llvm.pow.f128(fp128 0xL00000000000000000000000000000000, fp128 0xL00000000000000000000000000000000) #2114  %5 = fadd fp128 %3, %4115  %6 = icmp eq i64 undef, 0116  br i1 %6, label %7, label %2117 118; <label>:7:                                      ; preds = %2, %1119  %8 = phi fp128 [ 0xL00000000000000000000000000000000, %1 ], [ %5, %2 ]120  %9 = fadd fp128 0xL00000000000000000000000000000000, %8121  %10 = fadd fp128 0xL00000000000000000000000000000000, %9122  %11 = fadd fp128 0xL00000000000000000000000000000000, %10123  %12 = tail call fp128 @llvm.pow.f128(fp128 %11, fp128 0xL00000000000000000000000000000000) #2124  store fp128 %12, ptr %0, align 8125  ret void126}127