1; REQUIRES: asserts 2; RUN: llc -mtriple=x86_64-unknown-unknown -debug-only=isel < %s -o /dev/null 2>&1 | FileCheck %s 3 4; This tests the propagation of fast-math-flags from IR instructions to SDNodeFlags. 5 6; CHECK-LABEL: Initial selection DAG: %bb.0 'fmf_transfer:' 7 8; CHECK: t5: f32 = fadd nsz t2, t4 9; CHECK-NEXT: t6: f32 = fadd arcp t5, t4 10; CHECK-NEXT: t7: f32 = fadd nnan t6, t4 11; CHECK-NEXT: t8: f32 = fadd ninf t7, t4 12; CHECK-NEXT: t9: f32 = fadd contract t8, t4 13; CHECK-NEXT: t10: f32 = fadd afn t9, t4 14; CHECK-NEXT: t11: f32 = fadd reassoc t10, t4 15; CHECK-NEXT: t12: f32 = fadd nnan ninf nsz arcp contract afn reassoc t11, t4 16 17; CHECK: Optimized lowered selection DAG: %bb.0 'fmf_transfer:' 18 19define float @fmf_transfer(float %x, float %y) { 20 %f1 = fadd nsz float %x, %y 21 %f2 = fadd arcp float %f1, %y 22 %f3 = fadd nnan float %f2, %y 23 %f4 = fadd ninf float %f3, %y 24 %f5 = fadd contract float %f4, %y 25 %f6 = fadd afn float %f5, %y 26 %f7 = fadd reassoc float %f6, %y 27 %f8 = fadd fast float %f7, %y 28 ret float %f8 29} 30 31; CHECK-LABEL: Optimized type-legalized selection DAG: %bb.0 'fmf_setcc:' 32; CHECK: t13: i8 = setcc nnan ninf nsz arcp contract afn reassoc t2, ConstantFP:f32<0.000000e+00>, setlt:ch 33 34define float @fmf_setcc(float %x, float %y) { 35 %cmp = fcmp fast ult float %x, 0.0 36 %ret = select i1 %cmp, float %x, float %y 37 ret float %ret 38} 39 40; CHECK-LABEL: Initial selection DAG: %bb.0 'fmf_setcc_canon:' 41; CHECK: t14: i8 = setcc nnan ninf nsz arcp contract afn reassoc t2, ConstantFP:f32<0.000000e+00>, setgt:ch 42define float @fmf_setcc_canon(float %x, float %y) { 43 %cmp = fcmp fast ult float 0.0, %x 44 %ret = select i1 %cmp, float %x, float %y 45 ret float %ret 46} 47