brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.2 KiB · 419e839 Raw
122 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s3 4%"struct.std::array" = type { [4 x i64] }5 6define void @PR47857(ptr noalias nocapture writeonly sret(%"struct.std::array") align 8 %0, ptr nocapture noundef nonnull readonly align 8 dereferenceable(32) %1, ptr nocapture noundef nonnull readonly align 8 dereferenceable(32) %2) {7; CHECK-LABEL: PR47857:8; CHECK:       # %bb.0:9; CHECK-NEXT:    movq %rdi, %rax10; CHECK-NEXT:    movq (%rdx), %r911; CHECK-NEXT:    movq 8(%rdx), %rcx12; CHECK-NEXT:    xorl %edi, %edi13; CHECK-NEXT:    addq (%rsi), %r914; CHECK-NEXT:    adcq 8(%rsi), %rcx15; CHECK-NEXT:    movq 16(%rdx), %r816; CHECK-NEXT:    adcq 16(%rsi), %r817; CHECK-NEXT:    movq 24(%rdx), %rdx18; CHECK-NEXT:    adcq 24(%rsi), %rdx19; CHECK-NEXT:    sbbq %rdi, %rdi20; CHECK-NEXT:    andl $38, %edi21; CHECK-NEXT:    addq %rdi, %r922; CHECK-NEXT:    adcq $0, %rcx23; CHECK-NEXT:    adcq $0, %r824; CHECK-NEXT:    adcq $0, %rdx25; CHECK-NEXT:    sbbq %rdi, %rdi26; CHECK-NEXT:    andl $38, %edi27; CHECK-NEXT:    addq %r9, %rdi28; CHECK-NEXT:    adcq $0, %rcx29; CHECK-NEXT:    adcq $0, %r830; CHECK-NEXT:    adcq $0, %rdx31; CHECK-NEXT:    movq %rdi, (%rax)32; CHECK-NEXT:    movq %rcx, 8(%rax)33; CHECK-NEXT:    movq %r8, 16(%rax)34; CHECK-NEXT:    movq %rdx, 24(%rax)35; CHECK-NEXT:    retq36  %4 = load i64, ptr %1, align 837  %5 = getelementptr inbounds %"struct.std::array", ptr %1, i64 0, i32 0, i64 138  %6 = load i64, ptr %5, align 839  %7 = getelementptr inbounds %"struct.std::array", ptr %1, i64 0, i32 0, i64 240  %8 = load i64, ptr %7, align 841  %9 = getelementptr inbounds %"struct.std::array", ptr %1, i64 0, i32 0, i64 342  %10 = load i64, ptr %9, align 843  %11 = load i64, ptr %2, align 844  %12 = tail call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %11, i64 %4)45  %13 = extractvalue { i64, i1 } %12, 046  %14 = extractvalue { i64, i1 } %12, 147  %15 = getelementptr inbounds %"struct.std::array", ptr %2, i64 0, i32 0, i64 148  %16 = load i64, ptr %15, align 849  %17 = zext i1 %14 to i850  %18 = tail call { i8, i64 } @llvm.x86.addcarry.64(i8 %17, i64 %16, i64 %6)51  %19 = extractvalue { i8, i64 } %18, 152  %20 = extractvalue { i8, i64 } %18, 053  %21 = icmp ne i8 %20, 054  %22 = getelementptr inbounds %"struct.std::array", ptr %2, i64 0, i32 0, i64 255  %23 = load i64, ptr %22, align 856  %24 = zext i1 %21 to i857  %25 = tail call { i8, i64 } @llvm.x86.addcarry.64(i8 %24, i64 %23, i64 %8)58  %26 = extractvalue { i8, i64 } %25, 159  %27 = extractvalue { i8, i64 } %25, 060  %28 = icmp ne i8 %27, 061  %29 = getelementptr inbounds %"struct.std::array", ptr %2, i64 0, i32 0, i64 362  %30 = load i64, ptr %29, align 863  %31 = zext i1 %28 to i864  %32 = tail call { i8, i64 } @llvm.x86.addcarry.64(i8 %31, i64 %30, i64 %10)65  %33 = extractvalue { i8, i64 } %32, 166  %34 = extractvalue { i8, i64 } %32, 067  %35 = icmp ne i8 %34, 068  %36 = zext i1 %35 to i869  %37 = tail call { i8, i64 } @llvm.x86.subborrow.64(i8 %36, i64 0, i64 0)70  %38 = extractvalue { i8, i64 } %37, 171  %39 = and i64 %38, 3872  %40 = tail call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %39, i64 %13)73  %41 = extractvalue { i64, i1 } %40, 074  %42 = extractvalue { i64, i1 } %40, 175  %43 = zext i1 %42 to i876  %44 = tail call { i8, i64 } @llvm.x86.addcarry.64(i8 %43, i64 0, i64 %19)77  %45 = extractvalue { i8, i64 } %44, 178  %46 = extractvalue { i8, i64 } %44, 079  %47 = icmp ne i8 %46, 080  %48 = zext i1 %47 to i881  %49 = tail call { i8, i64 } @llvm.x86.addcarry.64(i8 %48, i64 0, i64 %26)82  %50 = extractvalue { i8, i64 } %49, 183  %51 = extractvalue { i8, i64 } %49, 084  %52 = icmp ne i8 %51, 085  %53 = zext i1 %52 to i886  %54 = tail call { i8, i64 } @llvm.x86.addcarry.64(i8 %53, i64 0, i64 %33)87  %55 = extractvalue { i8, i64 } %54, 188  %56 = extractvalue { i8, i64 } %54, 089  %57 = icmp ne i8 %56, 090  %58 = zext i1 %57 to i891  %59 = tail call { i8, i64 } @llvm.x86.subborrow.64(i8 %58, i64 %39, i64 %39)92  %60 = extractvalue { i8, i64 } %59, 193  %61 = and i64 %60, 3894  %62 = tail call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %61, i64 %41)95  %63 = extractvalue { i64, i1 } %62, 096  %64 = extractvalue { i64, i1 } %62, 197  %65 = zext i1 %64 to i898  %66 = tail call { i8, i64 } @llvm.x86.addcarry.64(i8 %65, i64 0, i64 %45)99  %67 = extractvalue { i8, i64 } %66, 1100  %68 = extractvalue { i8, i64 } %66, 0101  %69 = icmp ne i8 %68, 0102  %70 = zext i1 %69 to i8103  %71 = tail call { i8, i64 } @llvm.x86.addcarry.64(i8 %70, i64 0, i64 %50)104  %72 = extractvalue { i8, i64 } %71, 1105  %73 = extractvalue { i8, i64 } %71, 0106  %74 = icmp ne i8 %73, 0107  %75 = zext i1 %74 to i8108  %76 = tail call { i8, i64 } @llvm.x86.addcarry.64(i8 %75, i64 0, i64 %55)109  %77 = extractvalue { i8, i64 } %76, 1110  store i64 %63, ptr %0, align 8111  %78 = getelementptr inbounds %"struct.std::array", ptr %0, i64 0, i32 0, i64 1112  store i64 %67, ptr %78, align 8113  %79 = getelementptr inbounds %"struct.std::array", ptr %0, i64 0, i32 0, i64 2114  store i64 %72, ptr %79, align 8115  %80 = getelementptr inbounds %"struct.std::array", ptr %0, i64 0, i32 0, i64 3116  store i64 %77, ptr %80, align 8117  ret void118}119declare { i8, i64 } @llvm.x86.addcarry.64(i8, i64, i64)120declare { i8, i64 } @llvm.x86.subborrow.64(i8, i64, i64)121declare { i64, i1 } @llvm.uadd.with.overflow.i64(i64, i64)122