blob: 0e609e47717479160bf2d8556bf3807c0a0ac552 [file] [log] [blame]
Philip Reamesbb034462020-10-01 16:44:12 -07001; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
Bjorn Petterssona11faee2022-12-01 21:00:24 +01002; RUN: opt -passes=memcpyopt -S < %s -verify-memoryssa | FileCheck %s
Philip Reamesbb034462020-10-01 16:44:12 -07003
4target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128-ni:1"
5
Nikita Popov42d98d82022-10-05 14:26:57 +02006define void @illegal_memset(ptr %p) {
Philip Reamesbb034462020-10-01 16:44:12 -07007; CHECK-LABEL: @illegal_memset(
8; CHECK-NEXT: entry:
Nikita Popov42d98d82022-10-05 14:26:57 +02009; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr [[P:%.*]], i8 0, i64 8, i1 false)
10; CHECK-NEXT: [[GEP:%.*]] = getelementptr ptr addrspace(1), ptr [[P]], i64 1
11; CHECK-NEXT: store ptr addrspace(1) null, ptr [[GEP]], align 8
Philip Reamesbb034462020-10-01 16:44:12 -070012; CHECK-NEXT: ret void
13;
14entry:
Nikita Popov42d98d82022-10-05 14:26:57 +020015 call void @llvm.memset.p0.i64(ptr %p, i8 0, i64 8, i32 0, i1 false)
16 %gep = getelementptr ptr addrspace(1), ptr %p, i64 1
17 store ptr addrspace(1) null, ptr %gep
Philip Reamesbb034462020-10-01 16:44:12 -070018 ret void
19}
20
Nikita Popov42d98d82022-10-05 14:26:57 +020021define void @illegal_memcpy(ptr noalias align 16 %a,
Philip Reamesbb034462020-10-01 16:44:12 -070022; CHECK-LABEL: @illegal_memcpy(
Nikita Popov42d98d82022-10-05 14:26:57 +020023; CHECK-NEXT: [[VAL:%.*]] = load <2 x ptr addrspace(1)>, ptr [[A:%.*]], align 16
24; CHECK-NEXT: store <2 x ptr addrspace(1)> [[VAL]], ptr [[B:%.*]], align 16
Philip Reamesbb034462020-10-01 16:44:12 -070025; CHECK-NEXT: ret void
26;
Nikita Popov42d98d82022-10-05 14:26:57 +020027 ptr noalias align 16 %b) {
28 %val = load <2 x ptr addrspace(1)>, ptr %a, align 16
29 store <2 x ptr addrspace(1)> %val, ptr %b, align 16
Philip Reamesbb034462020-10-01 16:44:12 -070030 ret void
31}
32
Nikita Popov42d98d82022-10-05 14:26:57 +020033declare void @llvm.memset.p1.i64(ptr addrspace(1), i8, i64, i32, i1)
34declare void @llvm.memset.p0.i64(ptr, i8, i64, i32, i1)