brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 8d6b178 Raw
67 lines · cpp
1// RUN: %clang_cc1 -std=c++11 -triple x86_64-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefixes=ITANIUM,LINUX2// RUN: %clang_cc1 -std=c++11 -triple x86_64-apple-macos -emit-llvm %s -o - | FileCheck %s --check-prefixes=ITANIUM,DARWIN3// RUN: %clang_cc1 -std=c++11 -triple x86_64-windows-pc -emit-llvm %s -o - | FileCheck %s --check-prefix=WINDOWS4struct S {5  int __attribute__((target("sse4.2"))) foo(int);6  int __attribute__((target("arch=sandybridge"))) foo(int);7  int __attribute__((target("arch=ivybridge"))) foo(int);8  int __attribute__((target("default"))) foo(int);9};10 11int __attribute__((target("default"))) S::foo(int) { return 2; }12int __attribute__((target("sse4.2"))) S::foo(int) { return 0; }13int __attribute__((target("arch=ivybridge"))) S::foo(int) { return 1; }14 15int bar() {16  S s;17  return s.foo(0);18}19 20// DARWIN-NOT: comdat21 22// ITANIUM: @_ZN1S3fooEi.ifunc = weak_odr ifunc i32 (ptr, i32), ptr @_ZN1S3fooEi.resolver23 24// ITANIUM: define{{.*}} i32 @_ZN1S3fooEi(ptr {{[^,]*}} %this, i32 noundef %0)25// ITANIUM: ret i32 226 27// WINDOWS: define dso_local noundef i32 @"?foo@S@@QEAAHH@Z"(ptr {{[^,]*}} %this, i32 noundef %0)28// WINDOWS: ret i32 229 30// ITANIUM: define{{.*}} i32 @_ZN1S3fooEi.sse4.2(ptr {{[^,]*}} %this, i32 noundef %0)31// ITANIUM: ret i32 032 33// WINDOWS: define dso_local noundef i32 @"?foo@S@@QEAAHH@Z.sse4.2"(ptr {{[^,]*}} %this, i32 noundef %0)34// WINDOWS: ret i32 035 36// ITANIUM: define{{.*}} i32 @_ZN1S3fooEi.arch_ivybridge(ptr {{[^,]*}} %this, i32 noundef %0)37// ITANIUM: ret i32 138 39// WINDOWS: define dso_local noundef i32 @"?foo@S@@QEAAHH@Z.arch_ivybridge"(ptr {{[^,]*}} %this, i32 noundef %0)40// WINDOWS: ret i32 141 42// ITANIUM: define{{.*}} i32 @_Z3barv()43// ITANIUM: %s = alloca %struct.S, align 144// ITANIUM: %call = call noundef i32 @_ZN1S3fooEi.ifunc(ptr {{[^,]*}} %s, i32 noundef 0)45 46// WINDOWS: define dso_local noundef i32 @"?bar@@YAHXZ"()47// WINDOWS: %s = alloca %struct.S, align 148// WINDOWS: %call = call noundef i32 @"?foo@S@@QEAAHH@Z.resolver"(ptr {{[^,]*}} %s, i32 noundef 0)49 50// ITANIUM: define weak_odr ptr @_ZN1S3fooEi.resolver()51// LINUX-SAME: comdat52// ITANIUM: ret ptr @_ZN1S3fooEi.arch_sandybridge53// ITANIUM: ret ptr @_ZN1S3fooEi.arch_ivybridge54// ITANIUM: ret ptr @_ZN1S3fooEi.sse4.255// ITANIUM: ret ptr @_ZN1S3fooEi56 57// WINDOWS: define weak_odr dso_local i32 @"?foo@S@@QEAAHH@Z.resolver"(ptr %0, i32 %1) 58// WINDOWS-SAME: comdat59// WINDOWS: call i32 @"?foo@S@@QEAAHH@Z.arch_sandybridge"(ptr %0, i32 %1)60// WINDOWS: call i32 @"?foo@S@@QEAAHH@Z.arch_ivybridge"(ptr %0, i32 %1)61// WINDOWS: call i32 @"?foo@S@@QEAAHH@Z.sse4.2"(ptr %0, i32 %1)62// WINDOWS: call i32 @"?foo@S@@QEAAHH@Z"(ptr %0, i32 %1)63 64// ITANIUM: declare noundef i32 @_ZN1S3fooEi.arch_sandybridge(ptr {{[^,]*}}, i32 noundef)65 66// WINDOWS: declare dso_local noundef i32 @"?foo@S@@QEAAHH@Z.arch_sandybridge"(ptr {{[^,]*}}, i32 noundef)67