| ; RUN: llc -mtriple=armv7-linux-gnueabi -mcpu=generic -pass-remarks-analysis=target-features %s -o /dev/null 2>&1 | FileCheck %s |
| ; RUN: llc -mtriple=armv7-linux-gnueabi -mcpu=generic -mattr=+neon -pass-remarks-analysis=target-features %s -o /dev/null 2>&1 | FileCheck %s --check-prefix=COMMAND |
| |
| ; CPU defaults, implications and explicit disabling are resolved per function. |
| define void @baseline() { ret void } |
| define void @enabled() "target-features"="+neon" { ret void } |
| define void @disabled() "target-features"="+neon,-vfp3" { ret void } |
| define void @cpu() "target-cpu"="cortex-a8" { ret void } |
| define void @baseline_again() { ret void } |
| define void @"escaped\0Aname"() { ret void } |
| |
| ; Declarations and aliases do not create machine functions. |
| declare void @declaration() |
| @alias = alias void (), ptr @baseline |
| |
| ; The baseline is unchanged after functions with custom attributes. |
| ; CHECK-NOT: Enabled features |
| ; CHECK: remark: <unknown>:0:0: Enabled features for @baseline: [[BASELINE:.*]] |
| ; CHECK-NEXT: remark: <unknown>:0:0: Enabled features for @enabled: {{([^,]+,)*}}neon,{{([^,]+,)*}}vfp2,{{([^,]+,)*}}vfp3{{(,.*)?$}} |
| ; CHECK-NEXT: remark: <unknown>:0:0: Enabled features for @disabled: |
| ; CHECK-NOT: {{(^|[ ,])(neon|vfp3)(,|$)}} |
| ; CHECK-NEXT: remark: <unknown>:0:0: Enabled features for @cpu: {{([^,]+,)*}}neon,{{([^,]+,)*}}vfp3{{(,.*)?$}} |
| ; CHECK-NEXT: remark: <unknown>:0:0: Enabled features for @baseline_again: [[BASELINE]]{{$}} |
| ; CHECK-NEXT: remark: <unknown>:0:0: Enabled features for @"escaped\0Aname": [[BASELINE]]{{$}} |
| ; CHECK-NOT: Enabled features |
| |
| ; llc appends -mattr to existing function attributes, so the command line |
| ; re-enables features explicitly disabled by the IR. |
| ; COMMAND: remark: <unknown>:0:0: Enabled features for @baseline: {{([^,]+,)*}}neon{{(,.*)?$}} |
| ; COMMAND: remark: <unknown>:0:0: Enabled features for @disabled: {{([^,]+,)*}}neon{{(,.*)?$}} |