Index: lib/Target/X86/X86MCInstLower.cpp =================================================================== --- lib/Target/X86/X86MCInstLower.cpp +++ lib/Target/X86/X86MCInstLower.cpp @@ -1075,12 +1075,14 @@ // We should emit the RET followed by sleds. // // .Lxray_sled_N: + // .palign 2, ... // ret # or equivalent instruction // # 10 bytes worth of noops // // This just makes sure that the alignment for the next instruction is 2. auto CurSled = OutContext.createTempSymbol("xray_sled_", true); OutStreamer->EmitLabel(CurSled); + OutStreamer->EmitCodeAlignment(4); unsigned OpCode = MI.getOperand(0).getImm(); MCInst Ret; Ret.setOpcode(OpCode); Index: test/CodeGen/X86/xray-attribute-instrumentation.ll =================================================================== --- test/CodeGen/X86/xray-attribute-instrumentation.ll +++ test/CodeGen/X86/xray-attribute-instrumentation.ll @@ -8,6 +8,7 @@ ; CHECK-LABEL: Ltmp0: ret i32 0 ; CHECK-LABEL: Lxray_sled_1: +; CHECK-NEXT: .p2align 2, 0x90 ; CHECK-NEXT: retq ; CHECK-NEXT: nopw %cs:512(%rax,%rax) }