From 190565c26d763be240cb3c4692559eebfffc9817 Mon Sep 17 00:00:00 2001
From: Keno Fischer <[email protected]>
Date: Thu, 14 Apr 2022 00:53:14 -0400
Subject: [PATCH] Some minimal LLVM15 compat (#44870)

just a drive-by as I was trying out some commits on master
---
src/cgutils.cpp                |  4 ++--
src/disasm.cpp                 | 13 ++++++++++++-
src/llvm-remove-addrspaces.cpp |  4 ++--
3 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/src/cgutils.cpp b/src/cgutils.cpp
index 3dff14b7be63..f5f378de772c 100644
--- a/src/cgutils.cpp
+++ b/src/cgutils.cpp
@@ -2041,10 +2041,10 @@ static void emit_memcpy_llvm(jl_codectx_t &ctx, Value *dst, MDNode *tbaa_dst, Va
        const DataLayout &DL = jl_Module->getDataLayout();
        auto srcty = cast<PointerType>(src->getType());
        //TODO unsafe nonopaque pointer
-        auto srcel = srcty->getElementType();
+        auto srcel = srcty->getPointerElementType();
        auto dstty = cast<PointerType>(dst->getType());
        //TODO unsafe nonopaque pointer
-        auto dstel = dstty->getElementType();
+        auto dstel = dstty->getPointerElementType();
        if (srcel->isArrayTy() && srcel->getArrayNumElements() == 1) {
            src = ctx.builder.CreateConstInBoundsGEP2_32(srcel, src, 0, 0);
            srcel = srcel->getArrayElementType();
diff --git a/src/disasm.cpp b/src/disasm.cpp
index 22926043b9fa..ebbcd03d0fc3 100644
--- a/src/disasm.cpp
+++ b/src/disasm.cpp
@@ -108,6 +108,8 @@
#include <llvm/Support/CodeGen.h>
#include <llvm/IR/LegacyPassManager.h>

+#include <llvm-c/Disassembler.h>
+
#include "julia.h"
#include "julia_internal.h"
#include "jitlayers.h"
@@ -899,7 +901,11 @@ static void jl_dump_asm_internal(
    std::unique_ptr<MCCodeEmitter> CE;
    std::unique_ptr<MCAsmBackend> MAB;
    if (ShowEncoding) {
+#if JL_LLVM_VERSION >= 150000
+        CE.reset(TheTarget->createMCCodeEmitter(*MCII, Ctx));
+#else
        CE.reset(TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx));
+#endif
        MAB.reset(TheTarget->createMCAsmBackend(*STI, *MRI, Options));
    }

@@ -1231,8 +1237,13 @@ jl_value_t *jl_dump_function_asm_impl(void *F, char raw_mc, const char* asm_vari
             std::unique_ptr<MCAsmBackend> MAB(TM->getTarget().createMCAsmBackend(
                STI, MRI, TM->Options.MCOptions));
            std::unique_ptr<MCCodeEmitter> MCE;
-            if (binary) // enable MCAsmStreamer::AddEncodingComment printing
+            if (binary) { // enable MCAsmStreamer::AddEncodingComment printing
+#if JL_LLVM_VERSION >= 150000
+                MCE.reset(TM->getTarget().createMCCodeEmitter(MII, *Context));
+#else
                MCE.reset(TM->getTarget().createMCCodeEmitter(MII, MRI, *Context));
+#endif
+            }
            auto FOut = std::make_unique<formatted_raw_ostream>(asmfile);
            std::unique_ptr<MCStreamer> S(TM->getTarget().createAsmStreamer(
                *Context, std::move(FOut), true,
diff --git a/src/llvm-remove-addrspaces.cpp b/src/llvm-remove-addrspaces.cpp
index 5cd9a20b8cfd..a3f3cbb1fee7 100644
--- a/src/llvm-remove-addrspaces.cpp
+++ b/src/llvm-remove-addrspaces.cpp
@@ -51,7 +51,7 @@ class AddrspaceRemoveTypeRemapper : public ValueMapTypeRemapper {
            else {
                //Remove once opaque pointer transition is complete
                DstTy = PointerType::get(
-                        remapType(Ty->getElementType()),
+                        remapType(Ty->getPointerElementType()),
                        ASRemapper(Ty->getAddressSpace()));
            }
        }
@@ -161,7 +161,7 @@ class AddrspaceRemoveValueMaterializer : public ValueMaterializer {
                    auto ptrty = cast<PointerType>(Src->getType()->getScalarType());
                    //Remove once opaque pointer transition is complete
                    if (!ptrty->isOpaque()) {
-                        Type *SrcTy = remapType(ptrty->getElementType());
+                        Type *SrcTy = remapType(ptrty->getPointerElementType());
                        DstV = CE->getWithOperands(Ops, Ty, false, SrcTy);
                    }
                }