brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.4 KiB · 7966f8c Raw
195 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple powerpc64le < %s | FileCheck %s3 4; Check constrained ops converted to call5define void @test(ptr %cast) strictfp {6; CHECK-LABEL: test:7; CHECK:       # %bb.0: # %root8; CHECK-NEXT:    mflr 09; CHECK-NEXT:    .cfi_def_cfa_offset 6410; CHECK-NEXT:    .cfi_offset lr, 1611; CHECK-NEXT:    .cfi_offset r29, -2412; CHECK-NEXT:    .cfi_offset r30, -1613; CHECK-NEXT:    std 29, -24(1) # 8-byte Folded Spill14; CHECK-NEXT:    std 30, -16(1) # 8-byte Folded Spill15; CHECK-NEXT:    stdu 1, -64(1)16; CHECK-NEXT:    addi 30, 3, -817; CHECK-NEXT:    li 29, 25518; CHECK-NEXT:    std 0, 80(1)19; CHECK-NEXT:    .p2align 520; CHECK-NEXT:  .LBB0_1: # %for.body21; CHECK-NEXT:    #22; CHECK-NEXT:    lfdu 1, 8(30)23; CHECK-NEXT:    bl cos24; CHECK-NEXT:    nop25; CHECK-NEXT:    addi 29, 29, -126; CHECK-NEXT:    stfd 1, 0(30)27; CHECK-NEXT:    cmpldi 29, 028; CHECK-NEXT:    bc 12, 1, .LBB0_129; CHECK-NEXT:  # %bb.2: # %exit30; CHECK-NEXT:    addi 1, 1, 6431; CHECK-NEXT:    ld 0, 16(1)32; CHECK-NEXT:    ld 30, -16(1) # 8-byte Folded Reload33; CHECK-NEXT:    ld 29, -24(1) # 8-byte Folded Reload34; CHECK-NEXT:    mtlr 035; CHECK-NEXT:    blr36root:37  br label %for.body38 39exit:40  ret void41 42for.body:43  %i = phi i64 [ 0, %root ], [ %next, %for.body ]44  %idx = getelementptr inbounds double, ptr %cast, i64 %i45  %val = load double, ptr %idx46  %cos = tail call nnan ninf nsz arcp double @llvm.experimental.constrained.cos.f64(double %val, metadata !"round.dynamic", metadata !"fpexcept.strict")47  store double %cos, ptr %idx, align 848  %next = add nuw nsw i64 %i, 149  %cond = icmp eq i64 %next, 25550  br i1 %cond, label %exit, label %for.body51}52 53; Check constrained ops converted to native instruction54define void @test2(ptr %cast) strictfp {55; CHECK-LABEL: test2:56; CHECK:       # %bb.0: # %entry57; CHECK-NEXT:    li 4, 25558; CHECK-NEXT:    addi 3, 3, -859; CHECK-NEXT:    mtctr 460; CHECK-NEXT:    .p2align 461; CHECK-NEXT:  .LBB1_1: # %for.body62; CHECK-NEXT:    #63; CHECK-NEXT:    lfdu 0, 8(3)64; CHECK-NEXT:    xssqrtdp 0, 065; CHECK-NEXT:    stfd 0, 0(3)66; CHECK-NEXT:    bdnz .LBB1_167; CHECK-NEXT:  # %bb.2: # %exit68; CHECK-NEXT:    blr69entry:70  br label %for.body71 72for.body:73  %i = phi i64 [ 0, %entry ], [ %next, %for.body ]74  %idx = getelementptr inbounds double, ptr %cast, i64 %i75  %val = load double, ptr %idx76  %cos = tail call nnan ninf nsz arcp double @llvm.experimental.constrained.sqrt.f64(double %val, metadata !"round.dynamic", metadata !"fpexcept.strict")77  store double %cos, ptr %idx, align 878  %next = add nuw nsw i64 %i, 179  %cond = icmp eq i64 %next, 25580  br i1 %cond, label %exit, label %for.body81 82exit:83  ret void84}85 86; Check constrained ops converted to call87define void @testTan(ptr %cast) strictfp {88; CHECK-LABEL: testTan:89; CHECK:       # %bb.0: # %root90; CHECK-NEXT:    mflr 091; CHECK-NEXT:    .cfi_def_cfa_offset 6492; CHECK-NEXT:    .cfi_offset lr, 1693; CHECK-NEXT:    .cfi_offset r29, -2494; CHECK-NEXT:    .cfi_offset r30, -1695; CHECK-NEXT:    std 29, -24(1) # 8-byte Folded Spill96; CHECK-NEXT:    std 30, -16(1) # 8-byte Folded Spill97; CHECK-NEXT:    stdu 1, -64(1)98; CHECK-NEXT:    addi 30, 3, -899; CHECK-NEXT:    li 29, 255100; CHECK-NEXT:    std 0, 80(1)101; CHECK-NEXT:    .p2align 5102; CHECK-NEXT:  .LBB2_1: # %for.body103; CHECK-NEXT:    #104; CHECK-NEXT:    lfdu 1, 8(30)105; CHECK-NEXT:    bl tan106; CHECK-NEXT:    nop107; CHECK-NEXT:    addi 29, 29, -1108; CHECK-NEXT:    stfd 1, 0(30)109; CHECK-NEXT:    cmpldi 29, 0110; CHECK-NEXT:    bc 12, 1, .LBB2_1111; CHECK-NEXT:  # %bb.2: # %exit112; CHECK-NEXT:    addi 1, 1, 64113; CHECK-NEXT:    ld 0, 16(1)114; CHECK-NEXT:    ld 30, -16(1) # 8-byte Folded Reload115; CHECK-NEXT:    ld 29, -24(1) # 8-byte Folded Reload116; CHECK-NEXT:    mtlr 0117; CHECK-NEXT:    blr118root:119  br label %for.body120 121exit:122  ret void123 124for.body:125  %i = phi i64 [ 0, %root ], [ %next, %for.body ]126  %idx = getelementptr inbounds double, ptr %cast, i64 %i127  %val = load double, ptr %idx128  %tan = tail call nnan ninf nsz arcp double @llvm.experimental.constrained.tan.f64(double %val, metadata !"round.dynamic", metadata !"fpexcept.strict")129  store double %tan, ptr %idx, align 8130  %next = add nuw nsw i64 %i, 1131  %cond = icmp eq i64 %next, 255132  br i1 %cond, label %exit, label %for.body133}134 135; Check constrained ops converted to call136define void @testAtan2(ptr %cast1, ptr %cast2) strictfp {137; CHECK-LABEL: testAtan2:138; CHECK:       # %bb.0: # %root139; CHECK-NEXT:    mflr 0140; CHECK-NEXT:    .cfi_def_cfa_offset 64141; CHECK-NEXT:    .cfi_offset lr, 16142; CHECK-NEXT:    .cfi_offset r28, -32143; CHECK-NEXT:    .cfi_offset r29, -24144; CHECK-NEXT:    .cfi_offset r30, -16145; CHECK-NEXT:    std 28, -32(1) # 8-byte Folded Spill146; CHECK-NEXT:    std 29, -24(1) # 8-byte Folded Spill147; CHECK-NEXT:    std 30, -16(1) # 8-byte Folded Spill148; CHECK-NEXT:    stdu 1, -64(1)149; CHECK-NEXT:    addi 30, 3, -8150; CHECK-NEXT:    addi 29, 4, -8151; CHECK-NEXT:    li 28, 255152; CHECK-NEXT:    std 0, 80(1)153; CHECK-NEXT:    .p2align 5154; CHECK-NEXT:  .LBB3_1: # %for.body155; CHECK-NEXT:    #156; CHECK-NEXT:    lfdu 2, 8(29)157; CHECK-NEXT:    lfdu 1, 8(30)158; CHECK-NEXT:    bl atan2159; CHECK-NEXT:    nop160; CHECK-NEXT:    addi 28, 28, -1161; CHECK-NEXT:    stfd 1, 0(30)162; CHECK-NEXT:    cmpldi 28, 0163; CHECK-NEXT:    bc 12, 1, .LBB3_1164; CHECK-NEXT:  # %bb.2: # %exit165; CHECK-NEXT:    addi 1, 1, 64166; CHECK-NEXT:    ld 0, 16(1)167; CHECK-NEXT:    ld 30, -16(1) # 8-byte Folded Reload168; CHECK-NEXT:    ld 29, -24(1) # 8-byte Folded Reload169; CHECK-NEXT:    ld 28, -32(1) # 8-byte Folded Reload170; CHECK-NEXT:    mtlr 0171; CHECK-NEXT:    blr172root:173  br label %for.body174 175exit:176  ret void177 178for.body:179  %i = phi i64 [ 0, %root ], [ %next, %for.body ]180  %idx1 = getelementptr inbounds double, ptr %cast1, i64 %i181  %idx2 = getelementptr inbounds double, ptr %cast2, i64 %i182  %val1 = load double, ptr %idx1183  %val2 = load double, ptr %idx2184  %tan = tail call nnan ninf nsz arcp double @llvm.experimental.constrained.atan2.f64(double %val1, double %val2, metadata !"round.dynamic", metadata !"fpexcept.strict")185  store double %tan, ptr %idx1, align 8186  %next = add nuw nsw i64 %i, 1187  %cond = icmp eq i64 %next, 255188  br i1 %cond, label %exit, label %for.body189}190 191declare double @llvm.experimental.constrained.cos.f64(double, metadata, metadata)192declare double @llvm.experimental.constrained.tan.f64(double, metadata, metadata)193declare double @llvm.experimental.constrained.atan2.f64(double, double, metadata, metadata)194declare double @llvm.experimental.constrained.sqrt.f64(double, metadata, metadata)195