Changeset View
Changeset View
Standalone View
Standalone View
llvm/test/Transforms/InstCombine/fma.ll
Show First 20 Lines • Show All 93 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
define float @fma_fneg_const_fneg_y(float %y, float %z) { | define float @fma_fneg_const_fneg_y(float %y, float %z) { | ||||
; CHECK-LABEL: @fma_fneg_const_fneg_y( | ; CHECK-LABEL: @fma_fneg_const_fneg_y( | ||||
; CHECK-NEXT: [[FMA:%.*]] = call float @llvm.fma.f32(float [[Y:%.*]], float bitcast (i32 ptrtoint (i32* @external to i32) to float), float [[Z:%.*]]) | ; CHECK-NEXT: [[FMA:%.*]] = call float @llvm.fma.f32(float [[Y:%.*]], float bitcast (i32 ptrtoint (i32* @external to i32) to float), float [[Z:%.*]]) | ||||
; CHECK-NEXT: ret float [[FMA]] | ; CHECK-NEXT: ret float [[FMA]] | ||||
; | ; | ||||
%y.fneg = fsub float -0.0, %y | %y.fneg = fsub float -0.0, %y | ||||
%fma = call float @llvm.fma.f32(float fsub (float -0.0, float bitcast (i32 ptrtoint (i32* @external to i32) to float)), float %y.fneg, float %z) | %fsub = fsub float -0.0, bitcast (i32 ptrtoint (i32* @external to i32) to float) | ||||
%fma = call float @llvm.fma.f32(float %fsub, float %y.fneg, float %z) | |||||
ret float %fma | ret float %fma | ||||
} | } | ||||
define float @fma_unary_fneg_const_unary_fneg_y(float %y, float %z) { | define float @fma_unary_fneg_const_unary_fneg_y(float %y, float %z) { | ||||
; CHECK-LABEL: @fma_unary_fneg_const_unary_fneg_y( | ; CHECK-LABEL: @fma_unary_fneg_const_unary_fneg_y( | ||||
; CHECK-NEXT: [[FMA:%.*]] = call float @llvm.fma.f32(float [[Y:%.*]], float bitcast (i32 ptrtoint (i32* @external to i32) to float), float [[Z:%.*]]) | ; CHECK-NEXT: [[FMA:%.*]] = call float @llvm.fma.f32(float [[Y:%.*]], float bitcast (i32 ptrtoint (i32* @external to i32) to float), float [[Z:%.*]]) | ||||
; CHECK-NEXT: ret float [[FMA]] | ; CHECK-NEXT: ret float [[FMA]] | ||||
; | ; | ||||
%y.fneg = fneg float %y | %y.fneg = fneg float %y | ||||
%fma = call float @llvm.fma.f32(float fneg (float bitcast (i32 ptrtoint (i32* @external to i32) to float)), float %y.fneg, float %z) | %fma = call float @llvm.fma.f32(float fneg (float bitcast (i32 ptrtoint (i32* @external to i32) to float)), float %y.fneg, float %z) | ||||
ret float %fma | ret float %fma | ||||
} | } | ||||
define float @fma_fneg_x_fneg_const(float %x, float %z) { | define float @fma_fneg_x_fneg_const(float %x, float %z) { | ||||
; CHECK-LABEL: @fma_fneg_x_fneg_const( | ; CHECK-LABEL: @fma_fneg_x_fneg_const( | ||||
; CHECK-NEXT: [[FMA:%.*]] = call float @llvm.fma.f32(float [[X:%.*]], float bitcast (i32 ptrtoint (i32* @external to i32) to float), float [[Z:%.*]]) | ; CHECK-NEXT: [[FMA:%.*]] = call float @llvm.fma.f32(float [[X:%.*]], float bitcast (i32 ptrtoint (i32* @external to i32) to float), float [[Z:%.*]]) | ||||
; CHECK-NEXT: ret float [[FMA]] | ; CHECK-NEXT: ret float [[FMA]] | ||||
; | ; | ||||
%x.fneg = fsub float -0.0, %x | %x.fneg = fsub float -0.0, %x | ||||
%fma = call float @llvm.fma.f32(float %x.fneg, float fsub (float -0.0, float bitcast (i32 ptrtoint (i32* @external to i32) to float)), float %z) | %fsub = fsub float -0.0, bitcast (i32 ptrtoint (i32* @external to i32) to float) | ||||
%fma = call float @llvm.fma.f32(float %x.fneg, float %fsub, float %z) | |||||
ret float %fma | ret float %fma | ||||
} | } | ||||
define float @fma_unary_fneg_x_unary_fneg_const(float %x, float %z) { | define float @fma_unary_fneg_x_unary_fneg_const(float %x, float %z) { | ||||
; CHECK-LABEL: @fma_unary_fneg_x_unary_fneg_const( | ; CHECK-LABEL: @fma_unary_fneg_x_unary_fneg_const( | ||||
; CHECK-NEXT: [[FMA:%.*]] = call float @llvm.fma.f32(float [[X:%.*]], float bitcast (i32 ptrtoint (i32* @external to i32) to float), float [[Z:%.*]]) | ; CHECK-NEXT: [[FMA:%.*]] = call float @llvm.fma.f32(float [[X:%.*]], float bitcast (i32 ptrtoint (i32* @external to i32) to float), float [[Z:%.*]]) | ||||
; CHECK-NEXT: ret float [[FMA]] | ; CHECK-NEXT: ret float [[FMA]] | ||||
; | ; | ||||
▲ Show 20 Lines • Show All 82 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
define float @fmuladd_fneg_const_fneg_y(float %y, float %z) { | define float @fmuladd_fneg_const_fneg_y(float %y, float %z) { | ||||
; CHECK-LABEL: @fmuladd_fneg_const_fneg_y( | ; CHECK-LABEL: @fmuladd_fneg_const_fneg_y( | ||||
; CHECK-NEXT: [[FMULADD:%.*]] = call float @llvm.fmuladd.f32(float [[Y:%.*]], float bitcast (i32 ptrtoint (i32* @external to i32) to float), float [[Z:%.*]]) | ; CHECK-NEXT: [[FMULADD:%.*]] = call float @llvm.fmuladd.f32(float [[Y:%.*]], float bitcast (i32 ptrtoint (i32* @external to i32) to float), float [[Z:%.*]]) | ||||
; CHECK-NEXT: ret float [[FMULADD]] | ; CHECK-NEXT: ret float [[FMULADD]] | ||||
; | ; | ||||
%y.fneg = fsub float -0.0, %y | %y.fneg = fsub float -0.0, %y | ||||
%fmuladd = call float @llvm.fmuladd.f32(float fsub (float -0.0, float bitcast (i32 ptrtoint (i32* @external to i32) to float)), float %y.fneg, float %z) | %fsub = fsub float -0.0, bitcast (i32 ptrtoint (i32* @external to i32) to float) | ||||
%fmuladd = call float @llvm.fmuladd.f32(float %fsub, float %y.fneg, float %z) | |||||
ret float %fmuladd | ret float %fmuladd | ||||
} | } | ||||
define float @fmuladd_unary_fneg_const_unary_fneg_y(float %y, float %z) { | define float @fmuladd_unary_fneg_const_unary_fneg_y(float %y, float %z) { | ||||
; CHECK-LABEL: @fmuladd_unary_fneg_const_unary_fneg_y( | ; CHECK-LABEL: @fmuladd_unary_fneg_const_unary_fneg_y( | ||||
; CHECK-NEXT: [[FMULADD:%.*]] = call float @llvm.fmuladd.f32(float [[Y:%.*]], float bitcast (i32 ptrtoint (i32* @external to i32) to float), float [[Z:%.*]]) | ; CHECK-NEXT: [[FMULADD:%.*]] = call float @llvm.fmuladd.f32(float [[Y:%.*]], float bitcast (i32 ptrtoint (i32* @external to i32) to float), float [[Z:%.*]]) | ||||
; CHECK-NEXT: ret float [[FMULADD]] | ; CHECK-NEXT: ret float [[FMULADD]] | ||||
; | ; | ||||
%y.fneg = fneg float %y | %y.fneg = fneg float %y | ||||
%fmuladd = call float @llvm.fmuladd.f32(float fneg (float bitcast (i32 ptrtoint (i32* @external to i32) to float)), float %y.fneg, float %z) | %fmuladd = call float @llvm.fmuladd.f32(float fneg (float bitcast (i32 ptrtoint (i32* @external to i32) to float)), float %y.fneg, float %z) | ||||
ret float %fmuladd | ret float %fmuladd | ||||
} | } | ||||
define float @fmuladd_fneg_x_fneg_const(float %x, float %z) { | define float @fmuladd_fneg_x_fneg_const(float %x, float %z) { | ||||
; CHECK-LABEL: @fmuladd_fneg_x_fneg_const( | ; CHECK-LABEL: @fmuladd_fneg_x_fneg_const( | ||||
; CHECK-NEXT: [[FMULADD:%.*]] = call float @llvm.fmuladd.f32(float [[X:%.*]], float bitcast (i32 ptrtoint (i32* @external to i32) to float), float [[Z:%.*]]) | ; CHECK-NEXT: [[FMULADD:%.*]] = call float @llvm.fmuladd.f32(float [[X:%.*]], float bitcast (i32 ptrtoint (i32* @external to i32) to float), float [[Z:%.*]]) | ||||
; CHECK-NEXT: ret float [[FMULADD]] | ; CHECK-NEXT: ret float [[FMULADD]] | ||||
; | ; | ||||
%x.fneg = fsub float -0.0, %x | %x.fneg = fsub float -0.0, %x | ||||
%fmuladd = call float @llvm.fmuladd.f32(float %x.fneg, float fsub (float -0.0, float bitcast (i32 ptrtoint (i32* @external to i32) to float)), float %z) | %fsub = fsub float -0.0, bitcast (i32 ptrtoint (i32* @external to i32) to float) | ||||
%fmuladd = call float @llvm.fmuladd.f32(float %x.fneg, float %fsub, float %z) | |||||
ret float %fmuladd | ret float %fmuladd | ||||
} | } | ||||
define float @fmuladd_unary_fneg_x_unary_fneg_const(float %x, float %z) { | define float @fmuladd_unary_fneg_x_unary_fneg_const(float %x, float %z) { | ||||
; CHECK-LABEL: @fmuladd_unary_fneg_x_unary_fneg_const( | ; CHECK-LABEL: @fmuladd_unary_fneg_x_unary_fneg_const( | ||||
; CHECK-NEXT: [[FMULADD:%.*]] = call float @llvm.fmuladd.f32(float [[X:%.*]], float bitcast (i32 ptrtoint (i32* @external to i32) to float), float [[Z:%.*]]) | ; CHECK-NEXT: [[FMULADD:%.*]] = call float @llvm.fmuladd.f32(float [[X:%.*]], float bitcast (i32 ptrtoint (i32* @external to i32) to float), float [[Z:%.*]]) | ||||
; CHECK-NEXT: ret float [[FMULADD]] | ; CHECK-NEXT: ret float [[FMULADD]] | ||||
; | ; | ||||
▲ Show 20 Lines • Show All 586 Lines • Show Last 20 Lines |