Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / Transforms / CodeGenPrepare / NVPTX / dont-introduce-addrspacecast.ll
blobaf9b5ccd728749d49b3383be0f6fd20ecc1fba7f
1 ; RUN: opt -S -passes='require<profile-summary>,function(codegenprepare)' < %s | FileCheck %s
3 target datalayout = "e-i64:64-v16:16-v32:32-n16:32:64"
4 target triple = "nvptx64-nvidia-cuda"
7 ; ptrtoint/inttoptr combinations can introduce semantically-meaningful address space casts
8 ; which we can't sink into an addrspacecast
10 ; CHECK-LABEL: @test
11 define void @test(ptr %input_ptr) {
12   ; CHECK-LABEL: l1:
13   ; CHECK-NOT: addrspacecast
14   %intptr = ptrtoint ptr %input_ptr to i64
15   %ptr = inttoptr i64 %intptr to ptr addrspace(3)
17   br label %l1
18 l1:
20   store atomic i32 1, ptr addrspace(3) %ptr unordered, align 4
21   ret void
25 ; we still should be able to look through multiple sequences of inttoptr/ptrtoint
27 ; CHECK-LABEL: @test2
28 define void @test2(ptr %input_ptr) {
29   ; CHECK-LABEL: l2:
30   ; CHECK-NEXT: store
31   %intptr = ptrtoint ptr %input_ptr to i64
32   %ptr = inttoptr i64 %intptr to ptr addrspace(3)
34   %intptr2 = ptrtoint ptr addrspace(3) %ptr to i64
35   %ptr2 = inttoptr i64 %intptr2 to ptr
37   br label %l2
38 l2:
40   store atomic i32 1, ptr %ptr2 unordered, align 4
41   ret void