Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
#include "llvm/Support/Signals.h"
#include <sstream>

#include <cmath>
using namespace llvm;

void SystemZHLASMAsmStreamer::EmitEOL() {
// Comments are emitted on a new line before the instruction.
Expand Down Expand Up @@ -280,3 +280,8 @@ void SystemZHLASMAsmStreamer::emitValueImpl(const MCExpr *Value, unsigned Size,
emitHLASMValueImpl(Value, Size, true);
EmitEOL();
}

void SystemZHLASMAsmStreamer::emitEnd() {
OS << " END";
EmitEOL();
}
10 changes: 9 additions & 1 deletion llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMAsmStreamer.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_LIB_TARGET_SYSTEMZ_MCTARGETDESC_SYSTEMZHLASMASMSTREAMER_H
#define LLVM_LIB_TARGET_SYSTEMZ_MCTARGETDESC_SYSTEMZHLASMASMSTREAMER_H

#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/MC/MCAsmBackend.h"
Expand All @@ -24,7 +27,7 @@
#include "llvm/MC/MCTargetOptions.h"
#include "llvm/Support/FormattedStream.h"

using namespace llvm;
namespace llvm {

class SystemZHLASMAsmStreamer final : public MCStreamer {
constexpr static size_t InstLimit = 80;
Expand Down Expand Up @@ -119,4 +122,9 @@ class SystemZHLASMAsmStreamer final : public MCStreamer {
void emitHLASMValueImpl(const MCExpr *Value, unsigned Size,
bool Parens = false);
/// @}

void emitEnd();
};
} // namespace llvm

#endif // LLVM_LIB_TARGET_SYSTEMZ_MCTARGETDESC_SYSTEMZHLASMASMSTREAMER_H
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ static MCInstPrinter *createSystemZMCInstPrinter(const Triple &T,
static MCTargetStreamer *createAsmTargetStreamer(MCStreamer &S,
formatted_raw_ostream &OS,
MCInstPrinter *InstPrint) {
if (S.getContext().getTargetTriple().isOSzOS())
if (S.getContext().getTargetTriple().isOSzOS() && !GNUAsOnzOSCL)
return new SystemZTargetHLASMStreamer(S, OS);
else
return new SystemZTargetGNUStreamer(S, OS);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
//===----------------------------------------------------------------------===//

#include "SystemZTargetStreamer.h"
#include "SystemZHLASMAsmStreamer.h"
#include "llvm/MC/MCAsmInfo.h"
#include "llvm/MC/MCObjectFileInfo.h"

Expand All @@ -33,10 +34,16 @@ void SystemZTargetStreamer::emitConstantPools() {
EXRLTargets2Sym.clear();
}

SystemZHLASMAsmStreamer &SystemZTargetHLASMStreamer::getHLASMStreamer() {
return static_cast<SystemZHLASMAsmStreamer &>(getStreamer());
}

void SystemZTargetHLASMStreamer::emitExtern(StringRef Sym) {
getStreamer().emitRawText(Twine(" EXTRN ") + Twine(Sym));
}

void SystemZTargetHLASMStreamer::emitEnd() { getHLASMStreamer().emitEnd(); }
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just curious, but why not directly implement this as part of TargetStreamer similar to emitExtern?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

emitExtern() hard codes the space at the begin. In case we want to change this (e.g. make the output more like the XL output), then we have to bring the formatting into the TargetStreamer. I think it also makes code sharing easier. I expect emitExtern() to become more complicated. For functions, it needs to emit a XATTR instruction, and for variables it needs to emit CATTR. The same code is needed when emitting a label. IMHO it becomes easier when the implementation is just in 1 class.
It's a design choice, other variants are surely possible.


// HLASM statements can only perform a single operation at a time
const MCExpr *SystemZTargetHLASMStreamer::createWordDiffExpr(
MCContext &Ctx, const MCSymbol *Hi, const MCSymbol *Lo) {
Expand Down
4 changes: 4 additions & 0 deletions llvm/lib/Target/SystemZ/MCTargetDesc/SystemZTargetStreamer.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include <utility>

namespace llvm {
class SystemZHLASMAsmStreamer;

class SystemZTargetStreamer : public MCTargetStreamer {
public:
Expand Down Expand Up @@ -57,6 +58,7 @@ class SystemZTargetStreamer : public MCTargetStreamer {
virtual void emitMachine(StringRef CPUOrCommand) {};

virtual void emitExtern(StringRef Str) {};
virtual void emitEnd() {};

virtual const MCExpr *createWordDiffExpr(MCContext &Ctx, const MCSymbol *Hi,
const MCSymbol *Lo) {
Expand All @@ -77,7 +79,9 @@ class SystemZTargetHLASMStreamer : public SystemZTargetStreamer {
public:
SystemZTargetHLASMStreamer(MCStreamer &S, formatted_raw_ostream &OS)
: SystemZTargetStreamer(S), OS(OS) {}
SystemZHLASMAsmStreamer &getHLASMStreamer();
void emitExtern(StringRef Sym) override;
void emitEnd() override;
const MCExpr *createWordDiffExpr(MCContext &Ctx, const MCSymbol *Hi,
const MCSymbol *Lo) override;
};
Expand Down
3 changes: 3 additions & 0 deletions llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1114,6 +1114,9 @@ void SystemZAsmPrinter::emitEndOfAsmFile(Module &M) {
emitIDRLSection(M);
}
emitAttributes(M);
// Emit the END instruction in case of HLASM output. This must be the last
// instruction in the source file.
getTargetStreamer()->emitEnd();
}

void SystemZAsmPrinter::emitADASection() {
Expand Down
1 change: 1 addition & 0 deletions llvm/test/CodeGen/SystemZ/zos-hlasm-out.ll
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ define void @foo() {
; CHECK: DS 0B
; CHECK-LABEL: L#.str.1 DS 0H
; CHECK: DC XL6'576F726C6400'
; CHECK: END
entry:
%0 = load ptr, ptr @Greeting, align 8
call void (ptr, ...) @outs(ptr noundef %0, ptr noundef @.str.1)
Expand Down