| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 |
| ; Testcases comes from PR126817 and PR107569 |
| ; See PR54964 and langref for more information about how llvm deal with musttail currently |
| ; RUN: opt -passes=deadargelim -S < %s | FileCheck %s |
| |
| define i64 @A() { |
| ; CHECK-LABEL: define i64 @A() { |
| ; CHECK-NEXT: [[ENTRY:.*:]] |
| ; CHECK-NEXT: [[V2660:%.*]] = musttail call i64 @B() |
| ; CHECK-NEXT: ret i64 [[V2660]] |
| ; |
| entry: |
| %v2660 = musttail call i64 @B() |
| ret i64 %v2660 |
| } |
| |
| define internal i64 @B() { |
| ; CHECK-LABEL: define internal i64 @B() { |
| ; CHECK-NEXT: [[ENTRY:.*:]] |
| ; CHECK-NEXT: ret i64 0 |
| ; |
| entry: |
| ret i64 0 |
| } |
| |
| define internal i64 @C() { |
| ; CHECK-LABEL: define internal i64 @C() { |
| ; CHECK-NEXT: [[ENTRY:.*:]] |
| ; CHECK-NEXT: [[V30543:%.*]] = musttail call i64 @B() |
| ; CHECK-NEXT: ret i64 [[V30543]] |
| ; |
| entry: |
| %v30543 = musttail call i64 @B() |
| ret i64 %v30543 |
| } |
| |
| %struct.S = type { double } |
| |
| define internal %struct.S @F38() { |
| ; CHECK-LABEL: define internal %struct.S @F38() { |
| ; CHECK-NEXT: ret [[STRUCT_S:%.*]] zeroinitializer |
| ; |
| ret %struct.S { double 0.0 } |
| } |
| |
| define internal %struct.S @F36() { |
| ; CHECK-LABEL: define internal %struct.S @F36() { |
| ; CHECK-NEXT: [[TMP1:%.*]] = alloca [[STRUCT_S:%.*]], align 8 |
| ; CHECK-NEXT: [[TMP2:%.*]] = musttail call [[STRUCT_S]] @[[F38:[a-zA-Z0-9_$\"\\.-]*[a-zA-Z_$\"\\.-][a-zA-Z0-9_$\"\\.-]*]]() |
| ; CHECK-NEXT: ret [[STRUCT_S]] [[TMP2]] |
| ; |
| %1 = alloca %struct.S, align 8 |
| %3 = musttail call %struct.S @F38() |
| ret %struct.S %3 |
| } |
| |
| define double @foo() { |
| ; CHECK-LABEL: define double @foo() { |
| ; CHECK-NEXT: [[TMP1:%.*]] = call [[STRUCT_S:%.*]] @[[F36:[a-zA-Z0-9_$\"\\.-]*[a-zA-Z_$\"\\.-][a-zA-Z0-9_$\"\\.-]*]]() |
| ; CHECK-NEXT: [[TMP2:%.*]] = extractvalue [[STRUCT_S]] [[TMP1]], 0 |
| ; CHECK-NEXT: ret double [[TMP2]] |
| ; |
| %3 = call %struct.S @F36() |
| %5 = extractvalue %struct.S %3, 0 |
| ret double %5 |
| } |