aboutsummaryrefslogtreecommitdiff
path: root/llvm/test/Transforms/PhaseOrdering/memset-combine.ll
blob: b1a5881bcaa9c7df3b90eb35184d3cc6a47033bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5

; RUN: opt < %s -passes=instcombine,memcpyopt -S | FileCheck %s

; FIXME: These two memset calls should be merged into a single one.
define void @merge_memset(ptr %p, i1 %cond) {
; CHECK-LABEL: define void @merge_memset(
; CHECK-SAME: ptr [[P:%.*]], i1 [[COND:%.*]]) {
; CHECK-NEXT:    [[OFF:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 4096
; CHECK-NEXT:    call void @llvm.memset.p0.i64(ptr align 1 [[P]], i8 0, i64 4864, i1 false)
; CHECK-NEXT:    ret void
;
  %sel = select i1 %cond, ptr null, ptr %p
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull %sel, i8 0, i64 4096, i1 false)
  %off = getelementptr inbounds nuw i8, ptr %sel, i64 4096
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull %off, i8 0, i64 768, i1 false)
  ret void
}