From 7e073baedb8232b9519dbe15ea141ff98ccfe6ae Mon Sep 17 00:00:00 2001 From: Evan Cheng Date: Wed, 9 Apr 2008 20:57:25 +0000 Subject: - More aggressively coalescing away copies whose source is defined by an implicit_def. - Added insert_subreg coalescing support. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49448 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/CodeGen/X86/ins_subreg_coalesce-3.ll | 93 +++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 test/CodeGen/X86/ins_subreg_coalesce-3.ll (limited to 'test/CodeGen/X86/ins_subreg_coalesce-3.ll') diff --git a/test/CodeGen/X86/ins_subreg_coalesce-3.ll b/test/CodeGen/X86/ins_subreg_coalesce-3.ll new file mode 100644 index 0000000..ead920a --- /dev/null +++ b/test/CodeGen/X86/ins_subreg_coalesce-3.ll @@ -0,0 +1,93 @@ +; RUN: llvm-as < %s | llc -march=x86-64 | grep mov | count 9 + + %struct.COMPOSITE = type { i8, i16, i16 } + %struct.FILE = type { i8*, i32, i32, i16, i16, %struct.__sbuf, i32, i8*, i32 (i8*)*, i32 (i8*, i8*, i32)*, i64 (i8*, i64, i32)*, i32 (i8*, i8*, i32)*, %struct.__sbuf, %struct.__sFILEX*, i32, [3 x i8], [1 x i8], %struct.__sbuf, i32, i64 } + %struct.FILE_POS = type { i8, i8, i16, i32 } + %struct.FIRST_UNION = type { %struct.FILE_POS } + %struct.FONT_INFO = type { %struct.metrics*, i8*, i16*, %struct.COMPOSITE*, i32, %struct.rec*, %struct.rec*, i16, i16, i16*, i8*, i8*, i16* } + %struct.FOURTH_UNION = type { %struct.STYLE } + %struct.GAP = type { i8, i8, i16 } + %struct.LIST = type { %struct.rec*, %struct.rec* } + %struct.SECOND_UNION = type { { i16, i8, i8 } } + %struct.STYLE = type { { %struct.GAP }, { %struct.GAP }, i16, i16, i32 } + %struct.THIRD_UNION = type { %struct.FILE*, [8 x i8] } + %struct.__sFILEX = type opaque + %struct.__sbuf = type { i8*, i32 } + %struct.head_type = type { [2 x %struct.LIST], %struct.FIRST_UNION, %struct.SECOND_UNION, %struct.THIRD_UNION, %struct.FOURTH_UNION, %struct.rec*, { %struct.rec* }, %struct.rec*, %struct.rec*, %struct.rec*, %struct.rec*, %struct.rec*, %struct.rec*, %struct.rec*, %struct.rec*, i32 } + %struct.metrics = type { i16, i16, i16, i16, i16 } + %struct.rec = type { %struct.head_type } + +define void @FontChange() { +entry: + br i1 false, label %bb298, label %bb49 +bb49: ; preds = %entry + ret void +bb298: ; preds = %entry + br i1 false, label %bb304, label %bb366 +bb304: ; preds = %bb298 + br i1 false, label %bb330, label %bb428 +bb330: ; preds = %bb366, %bb304 + br label %bb366 +bb366: ; preds = %bb330, %bb298 + br i1 false, label %bb330, label %bb428 +bb428: ; preds = %bb366, %bb304 + br i1 false, label %bb650, label %bb433 +bb433: ; preds = %bb428 + ret void +bb650: ; preds = %bb650, %bb428 + %tmp658 = load i8* null, align 8 ; [#uses=1] + %tmp659 = icmp eq i8 %tmp658, 0 ; [#uses=1] + br i1 %tmp659, label %bb650, label %bb662 +bb662: ; preds = %bb650 + %tmp685 = icmp eq %struct.rec* null, null ; [#uses=1] + br i1 %tmp685, label %bb761, label %bb688 +bb688: ; preds = %bb662 + ret void +bb761: ; preds = %bb662 + %tmp487248736542 = load i32* null, align 4 ; [#uses=2] + %tmp487648776541 = and i32 %tmp487248736542, 57344 ; [#uses=1] + %tmp4881 = icmp eq i32 %tmp487648776541, 8192 ; [#uses=1] + br i1 %tmp4881, label %bb4884, label %bb4897 +bb4884: ; preds = %bb761 + %tmp488948906540 = and i32 %tmp487248736542, 7168 ; [#uses=1] + %tmp4894 = icmp eq i32 %tmp488948906540, 1024 ; [#uses=1] + br i1 %tmp4894, label %bb4932, label %bb4897 +bb4897: ; preds = %bb4884, %bb761 + ret void +bb4932: ; preds = %bb4884 + %tmp4933 = load i32* null, align 4 ; [#uses=1] + br i1 false, label %bb5054, label %bb4940 +bb4940: ; preds = %bb4932 + %tmp4943 = load i32* null, align 4 ; [#uses=2] + switch i32 %tmp4933, label %bb5054 [ + i32 159, label %bb4970 + i32 160, label %bb5002 + ] +bb4970: ; preds = %bb4940 + %tmp49746536 = trunc i32 %tmp4943 to i16 ; [#uses=1] + %tmp49764977 = and i16 %tmp49746536, 4095 ; [#uses=1] + %mask498049814982 = zext i16 %tmp49764977 to i64 ; [#uses=1] + %tmp4984 = getelementptr %struct.FONT_INFO* null, i64 %mask498049814982, i32 5 ; <%struct.rec**> [#uses=1] + %tmp4985 = load %struct.rec** %tmp4984, align 8 ; <%struct.rec*> [#uses=1] + %tmp4988 = getelementptr %struct.rec* %tmp4985, i64 0, i32 0, i32 3 ; <%struct.THIRD_UNION*> [#uses=1] + %tmp4991 = bitcast %struct.THIRD_UNION* %tmp4988 to i32* ; [#uses=1] + %tmp4992 = load i32* %tmp4991, align 8 ; [#uses=1] + %tmp49924993 = trunc i32 %tmp4992 to i16 ; [#uses=1] + %tmp4996 = add i16 %tmp49924993, 0 ; [#uses=1] + br label %bb5054 +bb5002: ; preds = %bb4940 + %tmp50066537 = trunc i32 %tmp4943 to i16 ; [#uses=1] + %tmp50085009 = and i16 %tmp50066537, 4095 ; [#uses=1] + %mask501250135014 = zext i16 %tmp50085009 to i64 ; [#uses=1] + %tmp5016 = getelementptr %struct.FONT_INFO* null, i64 %mask501250135014, i32 5 ; <%struct.rec**> [#uses=1] + %tmp5017 = load %struct.rec** %tmp5016, align 8 ; <%struct.rec*> [#uses=1] + %tmp5020 = getelementptr %struct.rec* %tmp5017, i64 0, i32 0, i32 3 ; <%struct.THIRD_UNION*> [#uses=1] + %tmp5023 = bitcast %struct.THIRD_UNION* %tmp5020 to i32* ; [#uses=1] + %tmp5024 = load i32* %tmp5023, align 8 ; [#uses=1] + %tmp50245025 = trunc i32 %tmp5024 to i16 ; [#uses=1] + %tmp5028 = sub i16 %tmp50245025, 0 ; [#uses=1] + br label %bb5054 +bb5054: ; preds = %bb5002, %bb4970, %bb4940, %bb4932 + %flen.0.reg2mem.0 = phi i16 [ %tmp4996, %bb4970 ], [ %tmp5028, %bb5002 ], [ 0, %bb4932 ], [ undef, %bb4940 ] ; [#uses=0] + ret void +} -- cgit v1.1