153 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			LLVM
		
	
	
	
			
		
		
	
	
			153 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			LLVM
		
	
	
	
| ; RUN: llvm-as < %s | llvm-dis | FileCheck %s
 | |
| 
 | |
| declare void @callee0()
 | |
| declare void @callee1(i32,i32)
 | |
| 
 | |
| define void @f0(i32* %ptr) {
 | |
| ; CHECK-LABEL: @f0(
 | |
|  entry:
 | |
|   %l = load i32, i32* %ptr
 | |
|   %x = add i32 42, 1
 | |
|   call void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "bar"(float  0.000000e+00, i64 100, i32 %l) ]
 | |
| ; CHECK: call void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "bar"(float  0.000000e+00, i64 100, i32 %l) ]
 | |
|   ret void
 | |
| }
 | |
| 
 | |
| define void @f1(i32* %ptr) {
 | |
| ; CHECK-LABEL: @f1(
 | |
|  entry:
 | |
|   %l = load i32, i32* %ptr
 | |
|   %x = add i32 42, 1
 | |
| 
 | |
|   call void @callee0()
 | |
|   call void @callee0() [ "foo"() ]
 | |
|   call void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "bar"(float  0.000000e+00, i64 100, i32 %l) ]
 | |
| ; CHECK: @callee0(){{$}}
 | |
| ; CHECK-NEXT: call void @callee0() [ "foo"() ]
 | |
| ; CHECK-NEXT: call void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "bar"(float  0.000000e+00, i64 100, i32 %l) ]
 | |
|   ret void
 | |
| }
 | |
| 
 | |
| define void @f2(i32* %ptr) {
 | |
| ; CHECK-LABEL: @f2(
 | |
|  entry:
 | |
|   call void @callee0() [ "foo"() ]
 | |
| ; CHECK: call void @callee0() [ "foo"() ]
 | |
|   ret void
 | |
| }
 | |
| 
 | |
| define void @f3(i32* %ptr) {
 | |
| ; CHECK-LABEL: @f3(
 | |
|  entry:
 | |
|   %l = load i32, i32* %ptr
 | |
|   %x = add i32 42, 1
 | |
|   call void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float  0.000000e+00, i32 %l) ]
 | |
| ; CHECK: call void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float  0.000000e+00, i32 %l) ]
 | |
|   ret void
 | |
| }
 | |
| 
 | |
| define void @f4(i32* %ptr) {
 | |
| ; CHECK-LABEL: @f4(
 | |
|  entry:
 | |
|   %l = load i32, i32* %ptr
 | |
|   %x = add i32 42, 1
 | |
|   call void @callee1(i32 10, i32 %x) [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float  0.000000e+00, i32 %l) ]
 | |
| ; CHECK: call void @callee1(i32 10, i32 %x) [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float  0.000000e+00, i32 %l) ]
 | |
|   ret void
 | |
| }
 | |
| 
 | |
| ; Invoke versions of the above tests:
 | |
| 
 | |
| 
 | |
| define void @g0(i32* %ptr) personality i8 3 {
 | |
| ; CHECK-LABEL: @g0(
 | |
|  entry:
 | |
|   %l = load i32, i32* %ptr
 | |
|   %x = add i32 42, 1
 | |
|   invoke void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "bar"(float  0.000000e+00, i64 100, i32 %l) ] to label %normal unwind label %exception
 | |
| ; CHECK: invoke void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "bar"(float  0.000000e+00, i64 100, i32 %l) ]
 | |
| 
 | |
| exception:
 | |
|   %cleanup = landingpad i8 cleanup
 | |
|   br label %normal
 | |
| normal:
 | |
|   ret void
 | |
| }
 | |
| 
 | |
| define void @g1(i32* %ptr) personality i8 3 {
 | |
| ; CHECK-LABEL: @g1(
 | |
|  entry:
 | |
|   %l = load i32, i32* %ptr
 | |
|   %x = add i32 42, 1
 | |
| 
 | |
|   invoke void @callee0() to label %normal unwind label %exception
 | |
| ; CHECK: invoke void @callee0(){{$}}
 | |
| 
 | |
| exception:
 | |
|   %cleanup = landingpad i8 cleanup
 | |
|   br label %normal
 | |
| 
 | |
| normal:
 | |
|   invoke void @callee0() [ "foo"() ] to label %normal1 unwind label %exception1
 | |
| ; CHECK: invoke void @callee0() [ "foo"() ]
 | |
| 
 | |
| exception1:
 | |
|   %cleanup1 = landingpad i8 cleanup
 | |
|   br label %normal1
 | |
| 
 | |
| normal1:
 | |
|   invoke void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float  0.000000e+00, i32 %l) ] to label %normal2 unwind label %exception2
 | |
| ; CHECK: invoke void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float  0.000000e+00, i32 %l) ]
 | |
| 
 | |
| exception2:
 | |
|   %cleanup2 = landingpad i8 cleanup
 | |
|   br label %normal2
 | |
| 
 | |
| normal2:
 | |
|   ret void
 | |
| }
 | |
| 
 | |
| define void @g2(i32* %ptr) personality i8 3 {
 | |
| ; CHECK-LABEL: @g2(
 | |
|  entry:
 | |
|   invoke void @callee0() [ "foo"() ] to label %normal unwind label %exception
 | |
| ; CHECK: invoke void @callee0() [ "foo"() ]
 | |
| 
 | |
| exception:
 | |
|   %cleanup = landingpad i8 cleanup
 | |
|   br label %normal
 | |
| normal:
 | |
|   ret void
 | |
| }
 | |
| 
 | |
| define void @g3(i32* %ptr) personality i8 3 {
 | |
| ; CHECK-LABEL: @g3(
 | |
|  entry:
 | |
|   %l = load i32, i32* %ptr
 | |
|   %x = add i32 42, 1
 | |
|   invoke void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float  0.000000e+00, i32 %l) ] to label %normal unwind label %exception
 | |
| ; CHECK: invoke void @callee0() [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float  0.000000e+00, i32 %l) ]
 | |
| 
 | |
| exception:
 | |
|   %cleanup = landingpad i8 cleanup
 | |
|   br label %normal
 | |
| normal:
 | |
|   ret void
 | |
| }
 | |
| 
 | |
| define void @g4(i32* %ptr) personality i8 3 {
 | |
| ; CHECK-LABEL: @g4(
 | |
|  entry:
 | |
|   %l = load i32, i32* %ptr
 | |
|   %x = add i32 42, 1
 | |
|   invoke void @callee1(i32 10, i32 %x) [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float  0.000000e+00, i32 %l) ]
 | |
|         to label %normal unwind label %exception
 | |
| ; CHECK: invoke void @callee1(i32 10, i32 %x) [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float  0.000000e+00, i32 %l) ]
 | |
| 
 | |
| exception:
 | |
|   %cleanup = landingpad i8 cleanup
 | |
|   br label %normal
 | |
| normal:
 | |
|   ret void
 | |
| }
 |