57 lines · plain
1; RUN: llc < %s -mcpu=atom -mtriple=i686-linux | FileCheck -check-prefix=ATOM32 %s2; RUN: llc < %s -mcpu=core2 -mtriple=i686-linux | FileCheck -check-prefix=ATOM-NOT32 %s3; RUN: llc < %s -mcpu=atom -mtriple=x86_64-linux | FileCheck -check-prefix=ATOM64 %s4; RUN: llc < %s -mcpu=core2 -mtriple=x86_64-linux | FileCheck -check-prefix=ATOM-NOT64 %s5; RUN: llc < %s -mcpu=slm -mtriple=i686-linux | FileCheck -check-prefix=SLM32 %s6; RUN: llc < %s -mcpu=slm -mtriple=x86_64-linux | FileCheck -check-prefix=SLM64 %s7; RUN: llc < %s -mcpu=goldmont -mtriple=i686-linux | FileCheck -check-prefix=SLM32 %s8; RUN: llc < %s -mcpu=goldmont -mtriple=x86_64-linux | FileCheck -check-prefix=SLM64 %s9 10 11; fn_ptr.ll12%class.A = type { ptr }13 14define i32 @test1() #0 {15 ;ATOM-LABEL: test1:16entry:17 %call = tail call ptr @_Z3facv()18 %vtable = load ptr, ptr %call, align 819 %0 = load ptr, ptr %vtable, align 820 ;ATOM32: movl (%ecx), %ecx21 ;ATOM32: calll *%ecx22 ;ATOM-NOT32: calll *(%ecx)23 ;ATOM64: movq (%rcx), %rcx24 ;ATOM64: callq *%rcx25 ;ATOM-NOT64: callq *(%rcx)26 ;SLM32: movl (%ecx), %ecx27 ;SLM32: calll *%ecx28 ;SLM64: movq (%rcx), %rcx29 ;SLM64: callq *%rcx30 tail call void %0(ptr %call)31 ret i32 032}33 34declare ptr @_Z3facv() #135 36; virt_fn.ll37@p = external dso_local global ptr38 39define i32 @test2() #0 {40 ;ATOM-LABEL: test2:41entry:42 %0 = load ptr, ptr @p, align 843 %1 = load ptr, ptr %0, align 844 ;ATOM32: movl (%eax), %eax45 ;ATOM32: calll *%eax46 ;ATOM-NOT: calll *(%eax)47 ;ATOM64: movq (%rax), %rax48 ;ATOM64: callq *%rax49 ;ATOM-NOT64: callq *(%rax)50 ;SLM32: movl (%eax), %eax51 ;SLM32: calll *%eax52 ;SLM64: movq (%rax), %rax53 ;SLM64: callq *%rax54 tail call void %1(i32 2)55 ret i32 056}57