aboutsummaryrefslogtreecommitdiff
path: root/llvm/test/Transforms/InstCombine/AMDGPU/phi-with-incoming-from-load.ll
blob: 14fb45e43af867f8f52eb38a80b7432dff48d418 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
; RUN: opt -passes=instcombine -S -o - %s | FileCheck %s

target triple = "amdgcn-amd-amdhsa"

%double_double = type { double, double }

declare void @llvm.memcpy.p0.p0.i64(ptr, ptr, i64, i1)

define void @_test(ptr addrspace(4) byref(%double_double) align 8 %in)  {
; CHECK-LABEL: define void @_test(
; CHECK-SAME: ptr addrspace(4) byref([[DOUBLE_DOUBLE:%.*]]) align 8 [[IN:%.*]]) {
; CHECK-NEXT:  [[ENTRY:.*]]:
; CHECK-NEXT:    [[ALPHA_UNION:%.*]] = addrspacecast ptr addrspace(4) [[IN]] to ptr
; CHECK-NEXT:    [[LOAD:%.*]] = load i8, ptr addrspace(5) null, align 1
; CHECK-NEXT:    [[LOADEDV:%.*]] = trunc i8 [[LOAD]] to i1
; CHECK-NEXT:    br i1 [[LOADEDV]], label %[[COND_END:.*]], label %[[COND_FALSE:.*]]
; CHECK:       [[COND_FALSE]]:
; CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr addrspace(4) [[IN]], align 8
; CHECK-NEXT:    br label %[[COND_END]]
; CHECK:       [[COND_END]]:
; CHECK-NEXT:    [[COND1:%.*]] = phi ptr [ [[TMP0]], %[[COND_FALSE]] ], [ [[ALPHA_UNION]], %[[ENTRY]] ]
; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(16) poison, ptr noundef nonnull align 1 dereferenceable(16) [[COND1]], i64 16, i1 false)
; CHECK-NEXT:    ret void
;
entry:
  %coerce = alloca %double_double, align 8, addrspace(5)
  %alpha_union = addrspacecast ptr addrspace(5) %coerce to ptr
  call void @llvm.memcpy.p5.p4.i64(ptr addrspace(5) align 8 %coerce, ptr addrspace(4) align 8 %in, i64 16, i1 false)
  %load1 = load i8, ptr addrspace(5) null, align 1
  %loadedv = trunc i8 %load1 to i1
  br i1 %loadedv, label %cond.end, label %cond.false

cond.false:
  %load2 = load ptr, ptr addrspace(5) %coerce, align 8
  br label %cond.end

cond.end:
  %cond = phi ptr [ %load2, %cond.false ], [ %alpha_union, %entry ]
  call void @llvm.memcpy.p0.p0.i64(ptr poison, ptr %cond, i64 16, i1 false)
  ret void
}