@@ -1023,6 +1023,60 @@ define float @cos_fabs_unary_fneg_f32(float %x) {
10231023 ret float %cos
10241024}
10251025
1026+
1027+ ; --------------------------------------------------------------------
1028+ ; llvm.amdgcn.sin
1029+ ; --------------------------------------------------------------------
1030+ declare float @llvm.amdgcn.sin.f32 (float ) nounwind readnone
1031+
1032+ define float @sin_fneg_f32 (float %x ) {
1033+ ; CHECK-LABEL: @sin_fneg_f32(
1034+ ; CHECK-NEXT: [[TMP1:%.*]] = call float @llvm.amdgcn.sin.f32(float [[X:%.*]])
1035+ ; CHECK-NEXT: [[SIN:%.*]] = fneg float [[TMP1]]
1036+ ; CHECK-NEXT: ret float [[SIN]]
1037+ ;
1038+ %x.fneg = fneg float %x
1039+ %sin = call float @llvm.amdgcn.sin.f32 (float %x.fneg )
1040+ ret float %sin
1041+ }
1042+
1043+ define float @sin_fabs_f32 (float %x ) {
1044+ ; CHECK-LABEL: @sin_fabs_f32(
1045+ ; CHECK-NEXT: [[X_FABS:%.*]] = call float @llvm.fabs.f32(float [[X:%.*]])
1046+ ; CHECK-NEXT: [[SIN:%.*]] = call float @llvm.amdgcn.sin.f32(float [[X_FABS]])
1047+ ; CHECK-NEXT: ret float [[SIN]]
1048+ ;
1049+ %x.fabs = call float @llvm.fabs.f32 (float %x )
1050+ %sin = call float @llvm.amdgcn.sin.f32 (float %x.fabs )
1051+ ret float %sin
1052+ }
1053+
1054+ define float @sin_fabs_fneg_f32 (float %x ) {
1055+ ; CHECK-LABEL: @sin_fabs_fneg_f32(
1056+ ; CHECK-NEXT: [[X_FABS:%.*]] = call float @llvm.fabs.f32(float [[X:%.*]])
1057+ ; CHECK-NEXT: [[TMP1:%.*]] = call float @llvm.amdgcn.sin.f32(float [[X_FABS]])
1058+ ; CHECK-NEXT: [[SIN:%.*]] = fneg float [[TMP1]]
1059+ ; CHECK-NEXT: ret float [[SIN]]
1060+ ;
1061+ %x.fabs = call float @llvm.fabs.f32 (float %x )
1062+ %x.fabs.fneg = fneg float %x.fabs
1063+ %sin = call float @llvm.amdgcn.sin.f32 (float %x.fabs.fneg )
1064+ ret float %sin
1065+ }
1066+
1067+ define float @sin_fabs_fneg_fast_f32 (float %x ) {
1068+ ; CHECK-LABEL: @sin_fabs_fneg_fast_f32(
1069+ ; CHECK-NEXT: [[X_FABS:%.*]] = call fast float @llvm.fabs.f32(float [[X:%.*]])
1070+ ; CHECK-NEXT: [[TMP1:%.*]] = call fast float @llvm.amdgcn.sin.f32(float [[X_FABS]])
1071+ ; CHECK-NEXT: [[SIN:%.*]] = fneg fast float [[TMP1]]
1072+ ; CHECK-NEXT: ret float [[SIN]]
1073+ ;
1074+ %x.fabs = call fast float @llvm.fabs.f32 (float %x )
1075+ %x.fabs.fneg = fneg float %x.fabs
1076+ %sin = call fast float @llvm.amdgcn.sin.f32 (float %x.fabs.fneg )
1077+ ret float %sin
1078+ }
1079+
10261080; --------------------------------------------------------------------
10271081; llvm.amdgcn.cvt.pkrtz
10281082; --------------------------------------------------------------------
0 commit comments