================ @@ -28,3 +28,102 @@ define i32 @test3(ptr %ptr) { %val = load atomic i32, ptr %ptr seq_cst, align 4 ret i32 %val } + +define <1 x i32> @atomic_vec1_i32(ptr %x) { +; CHECK-LABEL: atomic_vec1_i32: +; CHECK: ## %bb.0: +; CHECK-NEXT: movl (%rdi), %eax +; CHECK-NEXT: retq + %ret = load atomic <1 x i32>, ptr %x acquire, align 4 + ret <1 x i32> %ret +} + +define <1 x i8> @atomic_vec1_i8(ptr %x) { +; CHECK3-LABEL: atomic_vec1_i8: +; CHECK3: ## %bb.0: +; CHECK3-NEXT: movzbl (%rdi), %eax +; CHECK3-NEXT: retq +; +; CHECK0-LABEL: atomic_vec1_i8: +; CHECK0: ## %bb.0: +; CHECK0-NEXT: movb (%rdi), %al +; CHECK0-NEXT: retq + %ret = load atomic <1 x i8>, ptr %x acquire, align 4 + ret <1 x i8> %ret +} + +define <1 x i16> @atomic_vec1_i16(ptr %x) { +; CHECK3-LABEL: atomic_vec1_i16: +; CHECK3: ## %bb.0: +; CHECK3-NEXT: movzwl (%rdi), %eax +; CHECK3-NEXT: retq +; +; CHECK0-LABEL: atomic_vec1_i16: +; CHECK0: ## %bb.0: +; CHECK0-NEXT: movw (%rdi), %ax +; CHECK0-NEXT: retq + %ret = load atomic <1 x i16>, ptr %x acquire, align 4 + ret <1 x i16> %ret +} + +define <1 x i32> @atomic_vec1_i8_zext(ptr %x) { +; CHECK3-LABEL: atomic_vec1_i8_zext: +; CHECK3: ## %bb.0: +; CHECK3-NEXT: movzbl (%rdi), %eax +; CHECK3-NEXT: movzbl %al, %eax +; CHECK3-NEXT: retq +; +; CHECK0-LABEL: atomic_vec1_i8_zext: +; CHECK0: ## %bb.0: +; CHECK0-NEXT: movb (%rdi), %al +; CHECK0-NEXT: movzbl %al, %eax +; CHECK0-NEXT: retq + %ret = load atomic <1 x i8>, ptr %x acquire, align 4 + %zret = zext <1 x i8> %ret to <1 x i32> + ret <1 x i32> %zret +} + +define <1 x i64> @atomic_vec1_i16_sext(ptr %x) { +; CHECK3-LABEL: atomic_vec1_i16_sext: +; CHECK3: ## %bb.0: +; CHECK3-NEXT: movzwl (%rdi), %eax +; CHECK3-NEXT: movswq %ax, %rax +; CHECK3-NEXT: retq +; +; CHECK0-LABEL: atomic_vec1_i16_sext: +; CHECK0: ## %bb.0: +; CHECK0-NEXT: movw (%rdi), %ax +; CHECK0-NEXT: movswq %ax, %rax +; CHECK0-NEXT: retq + %ret = load atomic <1 x i16>, ptr %x acquire, align 4 + %sret = sext <1 x i16> %ret to <1 x i64> + ret <1 x i64> %sret +} + +define <1 x ptr addrspace(270)> @atomic_vec1_ptr270(ptr %x) { +; CHECK-LABEL: atomic_vec1_ptr270: +; CHECK: ## %bb.0: +; CHECK-NEXT: movl (%rdi), %eax +; CHECK-NEXT: retq + %ret = load atomic <1 x ptr addrspace(270)>, ptr %x acquire, align 4 + ret <1 x ptr addrspace(270)> %ret +} + +define <1 x bfloat> @atomic_vec1_bfloat(ptr %x) { +; CHECK3-LABEL: atomic_vec1_bfloat: +; CHECK3: ## %bb.0: +; CHECK3-NEXT: movzwl (%rdi), %eax +; CHECK3-NEXT: pinsrw $0, %eax, %xmm0 +; CHECK3-NEXT: retq +; +; CHECK0-LABEL: atomic_vec1_bfloat: +; CHECK0: ## %bb.0: +; CHECK0-NEXT: movw (%rdi), %cx +; CHECK0-NEXT: ## implicit-def: $eax +; CHECK0-NEXT: movw %cx, %ax +; CHECK0-NEXT: ## implicit-def: $xmm0 +; CHECK0-NEXT: pinsrw $0, %eax, %xmm0 +; CHECK0-NEXT: retq + %ret = load atomic <1 x bfloat>, ptr %x acquire, align 4 ---------------- arsenm wrote:
Overaligned https://github.com/llvm/llvm-project/pull/120385 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits