================
@@ -10,3 +10,19 @@
! RUN: %flang -fno-omit-frame-pointer --target=x86-none-none -fsyntax-only
-### %s -o %t 2>&1 | FileCheck %s --check-prefix=CHECK-ALLFP
! CHECK-ALLFP: "-fc1"{{.*}}"-mframe-pointer=all"
+
+! RUN: %flang -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer
--target=aarch64-none-none -fsyntax-only -### %s -o %t 2>&1 | FileCheck %s
--check-prefix=CHECK-FRAME-POINTER-ALL
+! CHECK-FRAME-POINTER-ALL: "-fc1"{{.*}}"-mframe-pointer=all"
+
+! RUN: %flang -fno-omit-frame-pointer -momit-leaf-frame-pointer
--target=x86_64-unknown-linux-gnu -fsyntax-only -### %s -o %t 2>&1 | FileCheck
%s --check-prefix=CHECK-X86-NONLEAF
+! CHECK-X86-NONLEAF: "-fc1"{{.*}}"-mframe-pointer=non-leaf-no-reserve"
+
+! RUN: %flang -fno-omit-frame-pointer -momit-leaf-frame-pointer
-mno-omit-leaf-frame-pointer --target=x86_64-unknown-linux-gnu -fsyntax-only
-### %s -o %t 2>&1 | FileCheck %s --check-prefix=CHECK-LAST-WINS
+! CHECK-LAST-WINS: "-fc1"{{.*}}"-mframe-pointer=all"
+
+! Without -fno-omit-frame-pointer the leaf option is silently allowed but has
no effect, matching Clang's behavior.
----------------
kaviya2510 wrote:
Here is the default behaviour per target:
| Target | Optimization | Default FP | Default Leaf FP | Result |
|--------|-------------|-----------|----------------|--------|
| `aarch64-none-none` | any | ON | OFF | `non-leaf-no-reserve` |
| `x86_64-unknown-linux-gnu` | `-O0` | ON | ON | `all` |
| `x86_64-unknown-linux-gnu` | `-O2` | OFF | N/A | `none` |
In aarch64-none-none:
- Default behaviour is -mframe-pointer=non-leaf-no-reserve
- With ` -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer` :
-mframe-pointer=all
In x86_64-unknown-linux-gnu:
1. At `-O0` level:
- Default behaviour: -mframe-pointer=all
- With ` -momit-leaf-frame-pointer`:
-mframe-pointer=-mframe-pointer=non-leaf-no-reserve
- With `-mno-omit-leaf-frame-pointer`: -mframe-pointer=all
- With `-fomit-frame-pointer -momit-leaf-frame-pointer` :
-mframe-pointer=none
3. At `-O1` level:
- Default behaviour: -mframe-pointer=none
- With ` -momit-leaf-frame-pointer`: Default
behaviour(`-mframe-pointer=none`)
- With `-mno-omit-leaf-frame-pointer`: Default
behaviour(`-mframe-pointer=none`)
- Without `-fno-omit-frame-pointer`, all leaf flags are silently ignored at
`-O2`
- With `-O2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer` :
-mframe-pointer=all
- With `-O2 -fno-omit-frame-pointer -momit-leaf-frame-pointer`:
-mframe-pointer= non-leaf-no-reserve
I updated the testcase as well. Kindly check it.
https://github.com/llvm/llvm-project/pull/216700
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits