// #target: macos-x64 module foo; fn void main() { int[5] a = { 1, 2, 3, 4, 5 }; void*[<2>] x = { &a[0], &a[4] }; int*[<2>] y = x; int[<2>] result = mem::@gather_aligned(y, (bool[<2>]) { true, false }, (int[<2>]){ 10, 20 }, 4); assert(result == { 1, 20}); result = mem::gather(y, (bool[<2>]) { true, false }, (int[<2>]){ 10, 20 }); assert(result == { 1, 20}); mem::@scatter_aligned(y, (int[<2>]){ 66, 77 }, (bool[<2>]) { false, true } , 4); assert(a == (int[5]){ 1, 2, 3, 4, 77}); mem::scatter(y, (int[<2>]){ 88, 99 }, (bool[<2>]) { true, false }); assert(a == (int[5]){ 88, 2, 3, 4, 77}); } /* #expect: foo.ll %4 = load <2 x ptr>, ptr %ptrvec, align 16 %5 = call <2 x i32> @llvm.masked.gather.v2i32.v2p0(<2 x ptr> %4, i32 4, <2 x i1> , <2 x i32> ) %9 = load <2 x ptr>, ptr %ptrvec1, align 16 %10 = call <2 x i32> @llvm.masked.gather.v2i32.v2p0(<2 x ptr> %9, i32 4, <2 x i1> , <2 x i32> ) %14 = load <2 x ptr>, ptr %ptrvec3, align 16 call void @llvm.masked.scatter.v2i32.v2p0(<2 x i32> , <2 x ptr> %14, i32 4, <2 x i1> ) %16 = load <2 x ptr>, ptr %ptrvec5, align 16 call void @llvm.masked.scatter.v2i32.v2p0(<2 x i32> , <2 x ptr> %16, i32 4, <2 x i1> )