brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.9 KiB · 4444dbd Raw
86 lines · c
1// RUN: %clang_cc1 -triple s390x-linux-gnu \2// RUN: -ffloat16-excess-precision=standard -emit-llvm -o - %s \3// RUN: | FileCheck %s -check-prefix=STANDARD4 5// RUN: %clang_cc1 -triple s390x-linux-gnu \6// RUN: -ffloat16-excess-precision=none -emit-llvm -o - %s \7// RUN: | FileCheck %s -check-prefix=NONE8 9// RUN: %clang_cc1 -triple s390x-linux-gnu \10// RUN: -ffloat16-excess-precision=fast -emit-llvm -o - %s \11// RUN: | FileCheck %s -check-prefix=FAST12 13_Float16 f(_Float16 a, _Float16 b, _Float16 c, _Float16 d) {14    return a * b + c * d;15}16 17// STANDARD-LABEL: define dso_local half @f(half noundef %a, half noundef %b, half noundef %c, half noundef %d) #0 {18// STANDARD-NEXT:  entry:19// STANDARD-NEXT:    %a.addr = alloca half, align 220// STANDARD-NEXT:    %b.addr = alloca half, align 221// STANDARD-NEXT:    %c.addr = alloca half, align 222// STANDARD-NEXT:    %d.addr = alloca half, align 223// STANDARD-NEXT:    store half %a, ptr %a.addr, align 224// STANDARD-NEXT:    store half %b, ptr %b.addr, align 225// STANDARD-NEXT:    store half %c, ptr %c.addr, align 226// STANDARD-NEXT:    store half %d, ptr %d.addr, align 227// STANDARD-NEXT:    %0 = load half, ptr %a.addr, align 228// STANDARD-NEXT:    %ext = fpext half %0 to float29// STANDARD-NEXT:    %1 = load half, ptr %b.addr, align 230// STANDARD-NEXT:    %ext1 = fpext half %1 to float31// STANDARD-NEXT:    %mul = fmul float %ext, %ext132// STANDARD-NEXT:    %2 = load half, ptr %c.addr, align 233// STANDARD-NEXT:    %ext2 = fpext half %2 to float34// STANDARD-NEXT:    %3 = load half, ptr %d.addr, align 235// STANDARD-NEXT:    %ext3 = fpext half %3 to float36// STANDARD-NEXT:    %mul4 = fmul float %ext2, %ext337// STANDARD-NEXT:    %add = fadd float %mul, %mul438// STANDARD-NEXT:    %unpromotion = fptrunc float %add to half39// STANDARD-NEXT:    ret half %unpromotion40// STANDARD-NEXT:  }41 42// NONE-LABEL: define dso_local half @f(half noundef %a, half noundef %b, half noundef %c, half noundef %d) #0 {43// NONE-NEXT:  entry:44// NONE-NEXT:    %a.addr = alloca half, align 245// NONE-NEXT:    %b.addr = alloca half, align 246// NONE-NEXT:    %c.addr = alloca half, align 247// NONE-NEXT:    %d.addr = alloca half, align 248// NONE-NEXT:    store half %a, ptr %a.addr, align 249// NONE-NEXT:    store half %b, ptr %b.addr, align 250// NONE-NEXT:    store half %c, ptr %c.addr, align 251// NONE-NEXT:    store half %d, ptr %d.addr, align 252// NONE-NEXT:    %0 = load half, ptr %a.addr, align 253// NONE-NEXT:    %1 = load half, ptr %b.addr, align 254// NONE-NEXT:    %mul = fmul half %0, %155// NONE-NEXT:    %2 = load half, ptr %c.addr, align 256// NONE-NEXT:    %3 = load half, ptr %d.addr, align 257// NONE-NEXT:    %mul1 = fmul half %2, %358// NONE-NEXT:    %add = fadd half %mul, %mul159// NONE-NEXT:    ret half %add60// NONE-NEXT:  }61 62// FAST-LABEL: define dso_local half @f(half noundef %a, half noundef %b, half noundef %c, half noundef %d) #0 {63// FAST-NEXT:  entry:64// FAST-NEXT:    %a.addr = alloca half, align 265// FAST-NEXT:    %b.addr = alloca half, align 266// FAST-NEXT:    %c.addr = alloca half, align 267// FAST-NEXT:    %d.addr = alloca half, align 268// FAST-NEXT:    store half %a, ptr %a.addr, align 269// FAST-NEXT:    store half %b, ptr %b.addr, align 270// FAST-NEXT:    store half %c, ptr %c.addr, align 271// FAST-NEXT:    store half %d, ptr %d.addr, align 272// FAST-NEXT:    %0 = load half, ptr %a.addr, align 273// FAST-NEXT:    %ext = fpext half %0 to float74// FAST-NEXT:    %1 = load half, ptr %b.addr, align 275// FAST-NEXT:    %ext1 = fpext half %1 to float76// FAST-NEXT:    %mul = fmul float %ext, %ext177// FAST-NEXT:    %2 = load half, ptr %c.addr, align 278// FAST-NEXT:    %ext2 = fpext half %2 to float79// FAST-NEXT:    %3 = load half, ptr %d.addr, align 280// FAST-NEXT:    %ext3 = fpext half %3 to float81// FAST-NEXT:    %mul4 = fmul float %ext2, %ext382// FAST-NEXT:    %add = fadd float %mul, %mul483// FAST-NEXT:    %unpromotion = fptrunc float %add to half84// FAST-NEXT:    ret half %unpromotion85// FAST-NEXT:  }86