1; RUN: llc -verify-machineinstrs -mtriple=x86_64-unknown < %s | FileCheck %s 2 3define dso_local void @one_instruction() #0 { 4; CHECK-LABEL: one_instruction: 5entry: 6 ret void 7; CHECK-NOT: retq 8; CHECK: popq %[[x:[^ ]*]] 9; CHECK-NEXT: lfence 10; CHECK-NEXT: jmpq *%[[x]] 11} 12 13; Function Attrs: noinline nounwind optnone uwtable 14define dso_local i32 @ordinary_function(i32 %x, i32 %y) #0 { 15; CHECK-LABEL: ordinary_function: 16entry: 17 %x.addr = alloca i32, align 4 18 %y.addr = alloca i32, align 4 19 store i32 %x, i32* %x.addr, align 4 20 store i32 %y, i32* %y.addr, align 4 21 %0 = load i32, i32* %x.addr, align 4 22 %1 = load i32, i32* %y.addr, align 4 23 %add = add nsw i32 %0, %1 24 ret i32 %add 25; CHECK-NOT: retq 26; CHECK: popq %[[x:[^ ]*]] 27; CHECK-NEXT: lfence 28; CHECK-NEXT: jmpq *%[[x]] 29} 30 31; Function Attrs: noinline nounwind optnone uwtable 32define dso_local i32 @no_caller_saved_registers_function(i32 %x, i32 %y) #1 { 33; CHECK-LABEL: no_caller_saved_registers_function: 34entry: 35 %x.addr = alloca i32, align 4 36 %y.addr = alloca i32, align 4 37 store i32 %x, i32* %x.addr, align 4 38 store i32 %y, i32* %y.addr, align 4 39 %0 = load i32, i32* %x.addr, align 4 40 %1 = load i32, i32* %y.addr, align 4 41 %add = add nsw i32 %0, %1 42 ret i32 %add 43; CHECK-NOT: retq 44; CHECK: popq %rcx 45; CHECK-NEXT: lfence 46; CHECK-NEXT: jmpq *%rcx 47} 48 49; Function Attrs: noinline nounwind optnone uwtable 50define dso_local preserve_mostcc void @preserve_most() #0 { 51; CHECK-LABEL: preserve_most: 52entry: 53 ret void 54; CHECK-NOT: retq 55; CHECK: popq %rax 56; CHECK-NEXT: lfence 57; CHECK-NEXT: jmpq *%rax 58} 59 60; Function Attrs: noinline nounwind optnone uwtable 61define dso_local preserve_allcc void @preserve_all() #0 { 62; CHECK-LABEL: preserve_all: 63entry: 64 ret void 65; CHECK-NOT: retq 66; CHECK: popq %rax 67; CHECK-NEXT: lfence 68; CHECK-NEXT: jmpq *%rax 69} 70 71define { i64, i128 } @ret_i64_i128() #0 { 72; CHECK-LABEL: ret_i64_i128: 73 ret { i64, i128 } { i64 1, i128 36893488147419103235 } 74; CHECK-NOT: retq 75; CHECK: popq %rsi 76; CHECK-NEXT: lfence 77; CHECK-NEXT: jmpq *%rsi 78} 79 80attributes #0 = { "target-features"="+lvi-cfi" } 81attributes #1 = { "no_caller_saved_registers" "target-features"="+lvi-cfi" } 82