; Check that command line option "-disable-tail-calls" overrides function ; attribute "disable-tail-calls". ; RUN: llc < %s -mtriple=riscv32-unknown-elf \ ; RUN: | FileCheck %s --check-prefixes=CALLER1,NOTAIL ; RUN: llc < %s -mtriple=riscv32-unknown-elf -disable-tail-calls \ ; RUN: | FileCheck %s --check-prefixes=CALLER1,NOTAIL ; RUN: llc < %s -mtriple=riscv32-unknown-elf -disable-tail-calls=false \ ; RUN: | FileCheck %s --check-prefixes=CALLER1,TAIL ; RUN: llc < %s -mtriple=riscv32-unknown-elf \ ; RUN: | FileCheck %s --check-prefixes=CALLER2,TAIL ; RUN: llc < %s -mtriple=riscv32-unknown-elf -disable-tail-calls \ ; RUN: | FileCheck %s --check-prefixes=CALLER2,NOTAIL ; RUN: llc < %s -mtriple=riscv32-unknown-elf -disable-tail-calls=false \ ; RUN: | FileCheck %s --check-prefixes=CALLER2,TAIL ; RUN: llc < %s -mtriple=riscv32-unknown-elf \ ; RUN: | FileCheck %s --check-prefixes=CALLER3,TAIL ; RUN: llc < %s -mtriple=riscv32-unknown-elf -disable-tail-calls \ ; RUN: | FileCheck %s --check-prefixes=CALLER3,NOTAIL ; RUN: llc < %s -mtriple=riscv32-unknown-elf -disable-tail-calls=false \ ; RUN: | FileCheck %s --check-prefixes=CALLER3,TAIL ; CALLER1-LABEL: {{\_?}}caller1 ; CALLER2-LABEL: {{\_?}}caller2 ; CALLER3-LABEL: {{\_?}}caller3 ; NOTAIL-NOT: tail callee ; NOTAIL: call callee ; TAIL: tail callee ; TAIL-NOT: call callee ; Function with attribute #0 = { "disable-tail-calls"="true" } define i32 @caller1(i32 %a) #0 { entry: %call = tail call i32 @callee(i32 %a) ret i32 %call } ; Function with attribute #1 = { "disable-tail-calls"="false" } define i32 @caller2(i32 %a) #0 { entry: %call = tail call i32 @callee(i32 %a) ret i32 %call } define i32 @caller3(i32 %a) { entry: %call = tail call i32 @callee(i32 %a) ret i32 %call } declare i32 @callee(i32) attributes #0 = { "disable-tail-calls"="true" } attributes #1 = { "disable-tail-calls"="false" }