@@ -1023,6 +1023,60 @@ define float @cos_fabs_unary_fneg_f32(float %x) {
1023
1023
ret float %cos
1024
1024
}
1025
1025
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
+
1026
1080
; --------------------------------------------------------------------
1027
1081
; llvm.amdgcn.cvt.pkrtz
1028
1082
; --------------------------------------------------------------------
0 commit comments