brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.4 KiB · 29fb9f1 Raw
87 lines · plain
1// RUN: mlir-opt -math-sincos-fusion %s | FileCheck %s2 3// CHECK-LABEL:   func.func @sincos_fusion(4// CHECK-SAME:      %[[ARG0:.*]]: f32,5// CHECK-SAME:      %[[ARG1:.*]]: f32) -> (f32, f32, f32, f32) {6// CHECK:           %[[VAL_0:.*]], %[[VAL_1:.*]] = math.sincos %[[ARG0]] : f327// CHECK:           %[[VAL_2:.*]], %[[VAL_3:.*]] = math.sincos %[[ARG1]] : f328// CHECK:           return %[[VAL_0]], %[[VAL_1]], %[[VAL_3]], %[[VAL_2]] : f32, f32, f32, f329// CHECK:         }10func.func @sincos_fusion(%arg0 : f32, %arg1 : f32) -> (f32, f32, f32, f32) {11    %0 = math.sin %arg0 : f3212    %1 = math.cos %arg0 : f3213 14    %2 = math.cos %arg1 : f3215    %3 = math.sin %arg1 : f3216 17    func.return %0, %1, %2, %3 : f32, f32, f32, f3218}19 20func.func private @sink(%arg0 : f32)21 22// CHECK:         func.func private @sink(f32)23// CHECK-LABEL:   func.func @sincos_ensure_ssa_dominance(24// CHECK-SAME:      %[[ARG0:.*]]: f32,25// CHECK-SAME:      %[[ARG1:.*]]: f32) -> (f32, f32, f32, f32) {26// CHECK:           %[[VAL_0:.*]], %[[VAL_1:.*]] = math.sincos %[[ARG0]] : f3227// CHECK:           call @sink(%[[VAL_0]]) : (f32) -> ()28// CHECK:           %[[VAL_2:.*]], %[[VAL_3:.*]] = math.sincos %[[ARG1]] : f3229// CHECK:           call @sink(%[[VAL_3]]) : (f32) -> ()30// CHECK:           return %[[VAL_0]], %[[VAL_1]], %[[VAL_3]], %[[VAL_2]] : f32, f32, f32, f3231// CHECK:         }32func.func @sincos_ensure_ssa_dominance(%arg0 : f32, %arg1 : f32) -> (f32, f32, f32, f32) {33    %0 = math.sin %arg0 : f3234    func.call @sink(%0) : (f32) -> ()35    %1 = math.cos %arg0 : f3236    %2 = math.cos %arg1 : f3237    func.call @sink(%2) : (f32) -> ()38    %3 = math.sin %arg1 : f3239    func.return %0, %1, %2, %3 : f32, f32, f32, f3240}41 42// CHECK-LABEL:   func.func @sincos_fusion_no_match_fmf(43// CHECK-SAME:      %[[ARG0:.*]]: f32) -> (f32, f32) {44// CHECK:           %[[VAL_0:.*]] = math.sin %[[ARG0]] fastmath<contract> : f3245// CHECK:           %[[VAL_1:.*]] = math.cos %[[ARG0]] : f3246// CHECK:           return %[[VAL_0]], %[[VAL_1]] : f32, f3247// CHECK:         }48func.func @sincos_fusion_no_match_fmf(%arg0 : f32) -> (f32, f32) {49    %0 = math.sin %arg0 fastmath<contract> : f3250    %1 = math.cos %arg0 : f3251    func.return %0, %1 : f32, f3252}53 54// CHECK-LABEL:   func.func @sincos_no_fusion_different_block(55// CHECK-SAME:      %[[ARG0:.*]]: f32,56// CHECK-SAME:      %[[ARG1:.*]]: i1) -> f32 {57// CHECK:           %[[VAL_0:.*]] = scf.if %[[ARG1]] -> (f32) {58// CHECK:             %[[VAL_1:.*]] = math.sin %[[ARG0]] : f3259// CHECK:             scf.yield %[[VAL_1]] : f3260// CHECK:           } else {61// CHECK:             %[[VAL_2:.*]] = math.cos %[[ARG0]] : f3262// CHECK:             scf.yield %[[VAL_2]] : f3263// CHECK:           }64// CHECK:           return %[[VAL_0]] : f3265// CHECK:         }66func.func @sincos_no_fusion_different_block(%arg0 : f32, %flag : i1) -> f32 {67  %0 = scf.if %flag -> f32 {68    %s = math.sin %arg0 : f3269    scf.yield %s : f3270  } else {71    %c = math.cos %arg0 : f3272    scf.yield %c : f3273  }74  func.return %0 : f3275}76 77// CHECK-LABEL:   func.func @sincos_fusion_preserve_fastmath(78// CHECK-SAME:      %[[ARG0:.*]]: f32) -> (f32, f32) {79// CHECK:           %[[VAL_0:.*]], %[[VAL_1:.*]] = math.sincos %[[ARG0]] fastmath<contract> : f3280// CHECK:           return %[[VAL_0]], %[[VAL_1]] : f32, f3281// CHECK:         }82func.func @sincos_fusion_preserve_fastmath(%arg0 : f32) -> (f32, f32) {83    %0 = math.sin %arg0 fastmath<contract> : f3284    %1 = math.cos %arg0 fastmath<contract> : f3285    func.return %0, %1 : f32, f3286}87