File: real.fir

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (51 lines) | stat: -rw-r--r-- 1,523 bytes parent folder | download | duplicates (15)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// Test lowering of REAL operations from FIR to LLVM IR

// RUN: tco %s | FileCheck %s

// CHECK-LABEL: @bar
func.func @bar(%a : f16, %b : f32, %c : f64, %d : f80, %e : f128) -> f80 {
  // CHECK: fpext half %{{.*}} to x86_fp80
  %1 = fir.convert %a : (f16) -> f80
  // CHECK: fpext float %{{.*}} to x86_fp80
  %2 = fir.convert %b : (f32) -> f80
  // CHECK: fpext double %{{.*}} to x86_fp80
  %3 = fir.convert %c : (f64) -> f80
  // CHECK-NOT: fpext
  // CHECK-NOT: fptrunc
  %4 = fir.convert %d : (f80) -> f80
  // CHECK: fptrunc fp128 %{{.*}} to x86_fp80
  %5 = fir.convert %e : (f128) -> f80
  // CHECK-NEXT: call x86_fp80
  %6 = fir.call @foop(%1, %2, %3, %4, %5) : (f80, f80, f80, f80, f80) -> f80
  return %6 : f80
}

// CHECK-LABEL: @foo
func.func @foo(%a : f128, %b : f128, %c : f128, %d : f128, %e : f128) -> f128 {
  // CHECK: fadd fp128
  %1 = arith.addf %a, %b : f128
  // CHECK: fmul fp128
  %2 = arith.mulf %1, %c : f128
  // CHECK: fsub fp128
  %3 = arith.subf %2, %d : f128
  // CHECK: fdiv fp128
  %4 = arith.divf %3, %e : f128
  // CHECK: frem fp128
  %5 = arith.remf %4, %a : f128
  return %5 : f128
}

// CHECK-LABEL: @foop
func.func @foop(%a : f80, %b : f80, %c : f80, %d : f80, %e : f80) -> f80 {
  // CHECK: fadd x86_fp80
  %1 = arith.addf %a, %b : f80
  // CHECK: fmul x86_fp80
  %2 = arith.mulf %1, %c : f80
  // CHECK: fsub x86_fp80
  %3 = arith.subf %2, %d : f80
  // CHECK: fdiv x86_fp80
  %4 = arith.divf %3, %e : f80
  // CHECK: frem x86_fp80
  %5 = arith.remf %4, %a : f80
  return %5 : f80
}