llvm/llvm/test/Transforms/NewGVN/propagate-ir-flags.ll

; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
; RUN: opt < %s -passes=newgvn -S | FileCheck %s

define double @func_fast(double %a, double %b) {
; CHECK-LABEL: define double @func_fast
; CHECK-SAME: (double [[A:%.*]], double [[B:%.*]]) {
; CHECK-NEXT:  entry:
; CHECK-NEXT:    [[A_ADDR:%.*]] = alloca double, align 8
; CHECK-NEXT:    [[ADD:%.*]] = fadd fast double [[B]], 3.000000e+00
; CHECK-NEXT:    store double [[ADD]], ptr [[A_ADDR]], align 8
; CHECK-NEXT:    ret double [[ADD]]
;
entry:
  %a.addr = alloca double, align 8
  %add = fadd fast double %b, 3.000000e+00
  store double %add, ptr %a.addr, align 8
  %load_add = load double, ptr %a.addr, align 8
  ret double %load_add
}

define double @func_no_fast(double %a, double %b) {
; CHECK-LABEL: define double @func_no_fast
; CHECK-SAME: (double [[A:%.*]], double [[B:%.*]]) {
; CHECK-NEXT:  entry:
; CHECK-NEXT:    [[A_ADDR:%.*]] = alloca double, align 8
; CHECK-NEXT:    [[ADD:%.*]] = fadd double [[B]], 3.000000e+00
; CHECK-NEXT:    store double [[ADD]], ptr [[A_ADDR]], align 8
; CHECK-NEXT:    ret double [[ADD]]
;
entry:
  %a.addr = alloca double, align 8
  %add = fadd fast double %b, 3.000000e+00
  store double %add, ptr %a.addr, align 8
  %duplicated_add = fadd double %b, 3.000000e+00
  ret double %duplicated_add
}