mulwide.ll 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. ; RUN: llc < %s -march=nvptx -mcpu=sm_20 -O3 | FileCheck %s --check-prefix=OPT
  2. ; RUN: llc < %s -march=nvptx -mcpu=sm_20 -O0 | FileCheck %s --check-prefix=NOOPT
  3. ; OPT-LABEL: @mulwide16
  4. ; NOOPT-LABEL: @mulwide16
  5. define i32 @mulwide16(i16 %a, i16 %b) {
  6. ; OPT: mul.wide.s16
  7. ; NOOPT: mul.lo.s32
  8. %val0 = sext i16 %a to i32
  9. %val1 = sext i16 %b to i32
  10. %val2 = mul i32 %val0, %val1
  11. ret i32 %val2
  12. }
  13. ; OPT-LABEL: @mulwideu16
  14. ; NOOPT-LABEL: @mulwideu16
  15. define i32 @mulwideu16(i16 %a, i16 %b) {
  16. ; OPT: mul.wide.u16
  17. ; NOOPT: mul.lo.s32
  18. %val0 = zext i16 %a to i32
  19. %val1 = zext i16 %b to i32
  20. %val2 = mul i32 %val0, %val1
  21. ret i32 %val2
  22. }
  23. ; OPT-LABEL: @mulwide8
  24. ; NOOPT-LABEL: @mulwide8
  25. define i32 @mulwide8(i8 %a, i8 %b) {
  26. ; OPT: mul.wide.s16
  27. ; NOOPT: mul.lo.s32
  28. %val0 = sext i8 %a to i32
  29. %val1 = sext i8 %b to i32
  30. %val2 = mul i32 %val0, %val1
  31. ret i32 %val2
  32. }
  33. ; OPT-LABEL: @mulwideu8
  34. ; NOOPT-LABEL: @mulwideu8
  35. define i32 @mulwideu8(i8 %a, i8 %b) {
  36. ; OPT: mul.wide.u16
  37. ; NOOPT: mul.lo.s32
  38. %val0 = zext i8 %a to i32
  39. %val1 = zext i8 %b to i32
  40. %val2 = mul i32 %val0, %val1
  41. ret i32 %val2
  42. }
  43. ; OPT-LABEL: @mulwide32
  44. ; NOOPT-LABEL: @mulwide32
  45. define i64 @mulwide32(i32 %a, i32 %b) {
  46. ; OPT: mul.wide.s32
  47. ; NOOPT: mul.lo.s64
  48. %val0 = sext i32 %a to i64
  49. %val1 = sext i32 %b to i64
  50. %val2 = mul i64 %val0, %val1
  51. ret i64 %val2
  52. }
  53. ; OPT-LABEL: @mulwideu32
  54. ; NOOPT-LABEL: @mulwideu32
  55. define i64 @mulwideu32(i32 %a, i32 %b) {
  56. ; OPT: mul.wide.u32
  57. ; NOOPT: mul.lo.s64
  58. %val0 = zext i32 %a to i64
  59. %val1 = zext i32 %b to i64
  60. %val2 = mul i64 %val0, %val1
  61. ret i64 %val2
  62. }
  63. ; OPT-LABEL: @mulwideu7
  64. ; NOOPT-LABEL: @mulwideu7
  65. define i64 @mulwideu7(i7 %a, i7 %b) {
  66. ; OPT: mul.wide.u32
  67. ; NOOPT: mul.lo.s64
  68. %val0 = zext i7 %a to i64
  69. %val1 = zext i7 %b to i64
  70. %val2 = mul i64 %val0, %val1
  71. ret i64 %val2
  72. }
  73. ; OPT-LABEL: @mulwides7
  74. ; NOOPT-LABEL: @mulwides7
  75. define i64 @mulwides7(i7 %a, i7 %b) {
  76. ; OPT: mul.wide.s32
  77. ; NOOPT: mul.lo.s64
  78. %val0 = sext i7 %a to i64
  79. %val1 = sext i7 %b to i64
  80. %val2 = mul i64 %val0, %val1
  81. ret i64 %val2
  82. }