OLD | NEW |
(Empty) | |
| 1 ; The NACLON test verifies that %r11 and %r11d are not used except as |
| 2 ; part of the return sequence. |
| 3 ; |
| 4 ; RUN: pnacl-llc -O2 -mtriple=x86_64-none-nacl < %s | \ |
| 5 ; RUN: FileCheck %s --check-prefix=NACLON |
| 6 ; |
| 7 ; The NACLOFF test verifies that %r11 would normally be used if PNaCl |
| 8 ; weren't reserving r11 for its own uses, to be sure NACLON is a |
| 9 ; valid test. |
| 10 ; |
| 11 ; RUN: pnacl-llc -O2 -mtriple=x86_64-linux < %s | \ |
| 12 ; RUN: FileCheck %s --check-prefix=NACLOFF |
| 13 ; |
| 14 ; NACLON: RegisterPressure: |
| 15 ; NACLON-NOT: %r11 |
| 16 ; NACLON: popq %r11 |
| 17 ; NACLON: nacljmp %r11d, %r15 |
| 18 ; |
| 19 ; NACLOFF: RegisterPressure: |
| 20 ; NACLOFF: %r11 |
| 21 ; NACLOFF: ret |
| 22 ; ModuleID = 'pnacl-avoids-r11-x86-64.c' |
| 23 target datalayout = "e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64
:64:64-p:32:32:32-v128:32:32" |
| 24 target triple = "le32-unknown-nacl" |
| 25 |
| 26 @v1a = external global i32 |
| 27 @v1b = external global i32 |
| 28 @v2a = external global i32 |
| 29 @v2b = external global i32 |
| 30 @v3a = external global i32 |
| 31 @v3b = external global i32 |
| 32 @v4a = external global i32 |
| 33 @v4b = external global i32 |
| 34 |
| 35 ; Function Attrs: nounwind |
| 36 define void @RegisterPressure() #0 { |
| 37 entry: |
| 38 %call = tail call i32 @GetValue() #2 |
| 39 %call1 = tail call i32 @GetValue() #2 |
| 40 %call2 = tail call i32 @GetValue() #2 |
| 41 %call3 = tail call i32 @GetValue() #2 |
| 42 %call4 = tail call i32 @GetValue() #2 |
| 43 %call5 = tail call i32 @GetValue() #2 |
| 44 %call6 = tail call i32 @GetValue() #2 |
| 45 %call7 = tail call i32 @GetValue() #2 |
| 46 %call8 = tail call i32 @GetValue() #2 |
| 47 %call9 = tail call i32 @GetValue() #2 |
| 48 %call10 = tail call i32 @GetValue() #2 |
| 49 %call11 = tail call i32 @GetValue() #2 |
| 50 %call12 = tail call i32 @GetValue() #2 |
| 51 %call13 = tail call i32 @GetValue() #2 |
| 52 %call14 = tail call i32 @GetValue() #2 |
| 53 %call15 = tail call i32 @GetValue() #2 |
| 54 tail call void @Use(i32 %call, i32 %call1, i32 %call2, i32 %call3, i32 %call4,
i32 %call5, i32 %call6, i32 %call7, i32 %call8, i32 %call9, i32 %call10, i32 %c
all11, i32 %call12, i32 %call13, i32 %call14, i32 %call15) #2 |
| 55 tail call void @Use(i32 %call, i32 %call1, i32 %call2, i32 %call3, i32 %call4,
i32 %call5, i32 %call6, i32 %call7, i32 %call8, i32 %call9, i32 %call10, i32 %c
all11, i32 %call12, i32 %call13, i32 %call14, i32 %call15) #2 |
| 56 %add = add nsw i32 %call1, %call |
| 57 %add16 = add nsw i32 %add, %call2 |
| 58 %add17 = add nsw i32 %add16, %call3 |
| 59 %add18 = add nsw i32 %add17, %call4 |
| 60 %add19 = add nsw i32 %add18, %call5 |
| 61 %add20 = add nsw i32 %add19, %call6 |
| 62 %add21 = add nsw i32 %add20, %call7 |
| 63 store volatile i32 %add21, i32* @v1a, align 4, !tbaa !0 |
| 64 %add22 = add nsw i32 %call9, %call8 |
| 65 %add23 = add nsw i32 %add22, %call10 |
| 66 %add24 = add nsw i32 %add23, %call11 |
| 67 %add25 = add nsw i32 %add24, %call12 |
| 68 %add26 = add nsw i32 %add25, %call13 |
| 69 %add27 = add nsw i32 %add26, %call14 |
| 70 %add28 = add nsw i32 %add27, %call15 |
| 71 store volatile i32 %add28, i32* @v1b, align 4, !tbaa !0 |
| 72 %add32 = add nsw i32 %call8, %add17 |
| 73 %add33 = add nsw i32 %add32, %call9 |
| 74 %add34 = add nsw i32 %add33, %call10 |
| 75 %add35 = add nsw i32 %add34, %call11 |
| 76 store volatile i32 %add35, i32* @v2a, align 4, !tbaa !0 |
| 77 %add36 = add nsw i32 %call5, %call4 |
| 78 %add37 = add nsw i32 %add36, %call6 |
| 79 %add38 = add nsw i32 %add37, %call7 |
| 80 %add39 = add nsw i32 %add38, %call12 |
| 81 %add40 = add nsw i32 %add39, %call13 |
| 82 %add41 = add nsw i32 %add40, %call14 |
| 83 %add42 = add nsw i32 %add41, %call15 |
| 84 store volatile i32 %add42, i32* @v2b, align 4, !tbaa !0 |
| 85 %add44 = add nsw i32 %call4, %add |
| 86 %add45 = add nsw i32 %add44, %call5 |
| 87 %add46 = add nsw i32 %add45, %call8 |
| 88 %add47 = add nsw i32 %add46, %call9 |
| 89 %add48 = add nsw i32 %add47, %call12 |
| 90 %add49 = add nsw i32 %add48, %call13 |
| 91 store volatile i32 %add49, i32* @v3a, align 4, !tbaa !0 |
| 92 %add50 = add nsw i32 %call3, %call2 |
| 93 %add51 = add nsw i32 %add50, %call6 |
| 94 %add52 = add nsw i32 %add51, %call7 |
| 95 %add53 = add nsw i32 %add52, %call10 |
| 96 %add54 = add nsw i32 %add53, %call11 |
| 97 %add55 = add nsw i32 %add54, %call14 |
| 98 %add56 = add nsw i32 %add55, %call15 |
| 99 store volatile i32 %add56, i32* @v3b, align 4, !tbaa !0 |
| 100 %add57 = add nsw i32 %call2, %call |
| 101 %add58 = add nsw i32 %add57, %call4 |
| 102 %add59 = add nsw i32 %add58, %call6 |
| 103 %add60 = add nsw i32 %add59, %call8 |
| 104 %add61 = add nsw i32 %add60, %call10 |
| 105 %add62 = add nsw i32 %add61, %call12 |
| 106 %add63 = add nsw i32 %add62, %call14 |
| 107 store volatile i32 %add63, i32* @v4a, align 4, !tbaa !0 |
| 108 %add64 = add nsw i32 %call3, %call1 |
| 109 %add65 = add nsw i32 %add64, %call5 |
| 110 %add66 = add nsw i32 %add65, %call7 |
| 111 %add67 = add nsw i32 %add66, %call9 |
| 112 %add68 = add nsw i32 %add67, %call11 |
| 113 %add69 = add nsw i32 %add68, %call13 |
| 114 %add70 = add nsw i32 %add69, %call15 |
| 115 store volatile i32 %add70, i32* @v4b, align 4, !tbaa !0 |
| 116 tail call void @Use(i32 %call, i32 %call1, i32 %call2, i32 %call3, i32 %call4,
i32 %call5, i32 %call6, i32 %call7, i32 %call8, i32 %call9, i32 %call10, i32 %c
all11, i32 %call12, i32 %call13, i32 %call14, i32 %call15) #2 |
| 117 tail call void @Use(i32 %call, i32 %call1, i32 %call2, i32 %call3, i32 %call4,
i32 %call5, i32 %call6, i32 %call7, i32 %call8, i32 %call9, i32 %call10, i32 %c
all11, i32 %call12, i32 %call13, i32 %call14, i32 %call15) #2 |
| 118 ret void |
| 119 } |
| 120 |
| 121 declare i32 @GetValue() #1 |
| 122 |
| 123 declare void @Use(i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i3
2, i32, i32, i32) #1 |
| 124 |
| 125 attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"=
"true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nan
s-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" } |
| 126 attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "n
o-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math
"="false" "unsafe-fp-math"="false" "use-soft-float"="false" } |
| 127 attributes #2 = { nounwind } |
| 128 |
| 129 !0 = metadata !{metadata !"int", metadata !1} |
| 130 !1 = metadata !{metadata !"omnipotent char", metadata !2} |
| 131 !2 = metadata !{metadata !"Simple C/C++ TBAA"} |
OLD | NEW |