ret <3 x i42> %r
}
-; TODO:
; This is the canonical pattern for a UB-safe rotate-by-variable with power-of-2-size scalar type.
; The backend expansion of funnel shift for targets that don't have a rotate instruction should
; match the original IR, so it is always good to canonicalize to the intrinsics for this pattern.
ret i32 %r
}
-; TODO:
; Extra uses don't change anything.
define i16 @rotl_safe_i16_commute_extra_use(i16 %x, i16 %y, i16* %p) {
ret i16 %r
}
-; TODO:
; Left/right is determined by the negation.
define i64 @rotr_safe_i64(i64 %x, i64 %y) {
ret i64 %r
}
-; TODO:
; Extra uses don't change anything.
define i8 @rotr_safe_i8_commute_extra_use(i8 %x, i8 %y, i8* %p) {
ret i8 %r
}
-; TODO:
; Vectors follow the same rules.
define <2 x i32> @rotl_safe_v2i32(<2 x i32> %x, <2 x i32> %y) {
ret <2 x i32> %r
}
-; TODO:
; Vectors follow the same rules.
define <3 x i16> @rotr_safe_v3i16(<3 x i16> %x, <3 x i16> %y) {