udivrem-change-width.ll 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. ; RUN: opt < %s -instcombine -S | FileCheck %s
  2. target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
  3. ; PR4548
  4. define i8 @udiv_i8(i8 %a, i8 %b) nounwind {
  5. %conv = zext i8 %a to i32
  6. %conv2 = zext i8 %b to i32
  7. %div = udiv i32 %conv, %conv2
  8. %conv3 = trunc i32 %div to i8
  9. ret i8 %conv3
  10. ; CHECK-LABEL: @udiv_i8(
  11. ; CHECK: udiv i8 %a, %b
  12. }
  13. define i8 @urem_i8(i8 %a, i8 %b) nounwind {
  14. %conv = zext i8 %a to i32
  15. %conv2 = zext i8 %b to i32
  16. %div = urem i32 %conv, %conv2
  17. %conv3 = trunc i32 %div to i8
  18. ret i8 %conv3
  19. ; CHECK-LABEL: @urem_i8(
  20. ; CHECK: urem i8 %a, %b
  21. }
  22. define i32 @udiv_i32(i8 %a, i8 %b) nounwind {
  23. %conv = zext i8 %a to i32
  24. %conv2 = zext i8 %b to i32
  25. %div = udiv i32 %conv, %conv2
  26. ret i32 %div
  27. ; CHECK-LABEL: @udiv_i32(
  28. ; CHECK: udiv i8 %a, %b
  29. ; CHECK: zext
  30. }
  31. define i32 @urem_i32(i8 %a, i8 %b) nounwind {
  32. %conv = zext i8 %a to i32
  33. %conv2 = zext i8 %b to i32
  34. %div = urem i32 %conv, %conv2
  35. ret i32 %div
  36. ; CHECK-LABEL: @urem_i32(
  37. ; CHECK: urem i8 %a, %b
  38. ; CHECK: zext
  39. }
  40. define i32 @udiv_i32_c(i8 %a) nounwind {
  41. %conv = zext i8 %a to i32
  42. %div = udiv i32 %conv, 10
  43. ret i32 %div
  44. ; CHECK-LABEL: @udiv_i32_c(
  45. ; CHECK: udiv i8 %a, 10
  46. ; CHECK: zext
  47. }
  48. define i32 @urem_i32_c(i8 %a) nounwind {
  49. %conv = zext i8 %a to i32
  50. %div = urem i32 %conv, 10
  51. ret i32 %div
  52. ; CHECK-LABEL: @urem_i32_c(
  53. ; CHECK: urem i8 %a, 10
  54. ; CHECK: zext
  55. }