diff options
Diffstat (limited to 'test/CodeGen/X86')
-rw-r--r-- | test/CodeGen/X86/2006-12-16-InlineAsmCrash.ll | 30 | ||||
-rw-r--r-- | test/CodeGen/X86/2007-02-23-DAGCombine-Miscompile.ll | 13 | ||||
-rw-r--r-- | test/CodeGen/X86/SwitchLowering.ll | 28 | ||||
-rw-r--r-- | test/CodeGen/X86/phi-immediate-factoring.ll | 54 | ||||
-rw-r--r-- | test/CodeGen/X86/switch-crit-edge-constant.ll | 52 |
5 files changed, 177 insertions, 0 deletions
diff --git a/test/CodeGen/X86/2006-12-16-InlineAsmCrash.ll b/test/CodeGen/X86/2006-12-16-InlineAsmCrash.ll new file mode 100644 index 0000000..50a244b --- /dev/null +++ b/test/CodeGen/X86/2006-12-16-InlineAsmCrash.ll @@ -0,0 +1,30 @@ +; RUN: llc < %s -march=x86 +; PR1049 +target datalayout = "e-p:32:32" +target triple = "i686-pc-linux-gnu" + %struct.QBasicAtomic = type { i32 } + %struct.QByteArray = type { %"struct.QByteArray::Data"* } + %"struct.QByteArray::Data" = type { %struct.QBasicAtomic, i32, i32, i8*, [1 x i8] } + %struct.QFactoryLoader = type { %struct.QObject } + %struct.QImageIOHandler = type { i32 (...)**, %struct.QImageIOHandlerPrivate* } + %struct.QImageIOHandlerPrivate = type opaque + %struct.QImageWriter = type { %struct.QImageWriterPrivate* } + %struct.QImageWriterPrivate = type { %struct.QByteArray, %struct.QFactoryLoader*, i1, %struct.QImageIOHandler*, i32, float, %struct.QString, %struct.QString, i32, %struct.QString, %struct.QImageWriter* } + %"struct.QList<QByteArray>" = type { %"struct.QList<QByteArray>::._20" } + %"struct.QList<QByteArray>::._20" = type { %struct.QListData } + %struct.QListData = type { %"struct.QListData::Data"* } + %"struct.QListData::Data" = type { %struct.QBasicAtomic, i32, i32, i32, i8, [1 x i8*] } + %struct.QObject = type { i32 (...)**, %struct.QObjectData* } + %struct.QObjectData = type { i32 (...)**, %struct.QObject*, %struct.QObject*, %"struct.QList<QByteArray>", i8, [3 x i8], i32, i32 } + %struct.QString = type { %"struct.QString::Data"* } + %"struct.QString::Data" = type { %struct.QBasicAtomic, i32, i32, i16*, i8, i8, [1 x i16] } + +define i1 @_ZNK12QImageWriter8canWriteEv() { + %tmp62 = load %struct.QImageWriterPrivate** null ; <%struct.QImageWriterPrivate*> [#uses=1] + %tmp = getelementptr %struct.QImageWriterPrivate* %tmp62, i32 0, i32 9 ; <%struct.QString*> [#uses=1] + %tmp75 = call %struct.QString* @_ZN7QStringaSERKS_( %struct.QString* %tmp, %struct.QString* null ) ; <%struct.QString*> [#uses=0] + call void asm sideeffect "lock\0Adecl $0\0Asetne 1", "=*m"( i32* null ) + ret i1 false +} + +declare %struct.QString* @_ZN7QStringaSERKS_(%struct.QString*, %struct.QString*) diff --git a/test/CodeGen/X86/2007-02-23-DAGCombine-Miscompile.ll b/test/CodeGen/X86/2007-02-23-DAGCombine-Miscompile.ll new file mode 100644 index 0000000..a8f0e57 --- /dev/null +++ b/test/CodeGen/X86/2007-02-23-DAGCombine-Miscompile.ll @@ -0,0 +1,13 @@ +; PR1219 +; RUN: llc < %s -march=x86 | grep {movl \$1, %eax} + +define i32 @test(i1 %X) { +old_entry1: + %hvar2 = zext i1 %X to i32 + %C = icmp sgt i32 %hvar2, -1 + br i1 %C, label %cond_true15, label %cond_true +cond_true15: + ret i32 1 +cond_true: + ret i32 2 +} diff --git a/test/CodeGen/X86/SwitchLowering.ll b/test/CodeGen/X86/SwitchLowering.ll new file mode 100644 index 0000000..29a0e82 --- /dev/null +++ b/test/CodeGen/X86/SwitchLowering.ll @@ -0,0 +1,28 @@ +; RUN: llc < %s -march=x86 | grep cmp | count 1 +; PR964 + +define i8* @FindChar(i8* %CurPtr) { +entry: + br label %bb + +bb: ; preds = %bb, %entry + %indvar = phi i32 [ 0, %entry ], [ %indvar.next, %bb ] ; <i32> [#uses=3] + %CurPtr_addr.0.rec = bitcast i32 %indvar to i32 ; <i32> [#uses=1] + %gep.upgrd.1 = zext i32 %indvar to i64 ; <i64> [#uses=1] + %CurPtr_addr.0 = getelementptr i8* %CurPtr, i64 %gep.upgrd.1 ; <i8*> [#uses=1] + %tmp = load i8* %CurPtr_addr.0 ; <i8> [#uses=3] + %tmp2.rec = add i32 %CurPtr_addr.0.rec, 1 ; <i32> [#uses=1] + %tmp2 = getelementptr i8* %CurPtr, i32 %tmp2.rec ; <i8*> [#uses=1] + %indvar.next = add i32 %indvar, 1 ; <i32> [#uses=1] + switch i8 %tmp, label %bb [ + i8 0, label %bb7 + i8 120, label %bb7 + ] + +bb7: ; preds = %bb, %bb + tail call void @foo( i8 %tmp ) + ret i8* %tmp2 +} + +declare void @foo(i8) + diff --git a/test/CodeGen/X86/phi-immediate-factoring.ll b/test/CodeGen/X86/phi-immediate-factoring.ll new file mode 100644 index 0000000..9f9f921 --- /dev/null +++ b/test/CodeGen/X86/phi-immediate-factoring.ll @@ -0,0 +1,54 @@ +; PR1296 +; RUN: llc < %s -march=x86 | grep {movl \$1} | count 1 + +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64" +target triple = "i686-apple-darwin8" + +define i32 @foo(i32 %A, i32 %B, i32 %C) { +entry: + switch i32 %A, label %out [ + i32 1, label %bb + i32 0, label %bb13 + i32 2, label %bb35 + ] + +bb: ; preds = %cond_next, %entry + %i.144.1 = phi i32 [ 0, %entry ], [ %tmp7, %cond_next ] ; <i32> [#uses=2] + %tmp4 = and i32 %i.144.1, %B ; <i32> [#uses=1] + icmp eq i32 %tmp4, 0 ; <i1>:0 [#uses=1] + br i1 %0, label %cond_next, label %out + +cond_next: ; preds = %bb + %tmp7 = add i32 %i.144.1, 1 ; <i32> [#uses=2] + icmp slt i32 %tmp7, 1000 ; <i1>:1 [#uses=1] + br i1 %1, label %bb, label %out + +bb13: ; preds = %cond_next18, %entry + %i.248.1 = phi i32 [ 0, %entry ], [ %tmp20, %cond_next18 ] ; <i32> [#uses=2] + %tmp16 = and i32 %i.248.1, %C ; <i32> [#uses=1] + icmp eq i32 %tmp16, 0 ; <i1>:2 [#uses=1] + br i1 %2, label %cond_next18, label %out + +cond_next18: ; preds = %bb13 + %tmp20 = add i32 %i.248.1, 1 ; <i32> [#uses=2] + icmp slt i32 %tmp20, 1000 ; <i1>:3 [#uses=1] + br i1 %3, label %bb13, label %out + +bb27: ; preds = %bb35 + %tmp30 = and i32 %i.3, %C ; <i32> [#uses=1] + icmp eq i32 %tmp30, 0 ; <i1>:4 [#uses=1] + br i1 %4, label %cond_next32, label %out + +cond_next32: ; preds = %bb27 + %indvar.next = add i32 %i.3, 1 ; <i32> [#uses=1] + br label %bb35 + +bb35: ; preds = %entry, %cond_next32 + %i.3 = phi i32 [ %indvar.next, %cond_next32 ], [ 0, %entry ] ; <i32> [#uses=3] + icmp slt i32 %i.3, 1000 ; <i1>:5 [#uses=1] + br i1 %5, label %bb27, label %out + +out: ; preds = %bb27, %bb35, %bb13, %cond_next18, %bb, %cond_next, %entry + %result.0 = phi i32 [ 0, %entry ], [ 1, %bb ], [ 0, %cond_next ], [ 1, %bb13 ], [ 0, %cond_next18 ], [ 1, %bb27 ], [ 0, %bb35 ] ; <i32> [#uses=1] + ret i32 %result.0 +} diff --git a/test/CodeGen/X86/switch-crit-edge-constant.ll b/test/CodeGen/X86/switch-crit-edge-constant.ll new file mode 100644 index 0000000..1f2ab0d --- /dev/null +++ b/test/CodeGen/X86/switch-crit-edge-constant.ll @@ -0,0 +1,52 @@ +; PR925 +; RUN: llc < %s -march=x86 | \ +; RUN: grep mov.*str1 | count 1 + +target datalayout = "e-p:32:32" +target triple = "i686-apple-darwin8.7.2" +@str1 = internal constant [5 x i8] c"bonk\00" ; <[5 x i8]*> [#uses=1] +@str2 = internal constant [5 x i8] c"bork\00" ; <[5 x i8]*> [#uses=1] +@str = internal constant [8 x i8] c"perfwap\00" ; <[8 x i8]*> [#uses=1] + +define void @foo(i32 %C) { +entry: + switch i32 %C, label %bb2 [ + i32 1, label %blahaha + i32 2, label %blahaha + i32 3, label %blahaha + i32 4, label %blahaha + i32 5, label %blahaha + i32 6, label %blahaha + i32 7, label %blahaha + i32 8, label %blahaha + i32 9, label %blahaha + i32 10, label %blahaha + ] + +bb2: ; preds = %entry + %tmp5 = and i32 %C, 123 ; <i32> [#uses=1] + %tmp = icmp eq i32 %tmp5, 0 ; <i1> [#uses=1] + br i1 %tmp, label %blahaha, label %cond_true + +cond_true: ; preds = %bb2 + br label %blahaha + +blahaha: ; preds = %cond_true, %bb2, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry + %s.0 = phi i8* [ getelementptr ([8 x i8]* @str, i32 0, i64 0), %cond_true ], [ getelementptr ([5 x i8]* @str1, i32 0, i64 0), %entry ], [ getelementptr ([5 x i8]* @str1, i32 0, i64 0), %entry ], [ getelementptr ([5 x i8]* @str1, i32 0, i64 0), %entry ], [ getelementptr ([5 x i8]* @str1, i32 0, i64 0), %entry ], [ getelementptr ([5 x i8]* @str1, i32 0, i64 0), %entry ], [ getelementptr ([5 x i8]* @str1, i32 0, i64 0), %entry ], [ getelementptr ([5 x i8]* @str1, i32 0, i64 0), %entry ], [ getelementptr ([5 x i8]* @str1, i32 0, i64 0), %entry ], [ getelementptr ([5 x i8]* @str1, i32 0, i64 0), %entry ], [ getelementptr ([5 x i8]* @str1, i32 0, i64 0), %entry ], [ getelementptr ([5 x i8]* @str2, i32 0, i64 0), %bb2 ] ; <i8*> [#uses=13] + %tmp8 = tail call i32 (i8*, ...)* @printf( i8* %s.0 ) ; <i32> [#uses=0] + %tmp10 = tail call i32 (i8*, ...)* @printf( i8* %s.0 ) ; <i32> [#uses=0] + %tmp12 = tail call i32 (i8*, ...)* @printf( i8* %s.0 ) ; <i32> [#uses=0] + %tmp14 = tail call i32 (i8*, ...)* @printf( i8* %s.0 ) ; <i32> [#uses=0] + %tmp16 = tail call i32 (i8*, ...)* @printf( i8* %s.0 ) ; <i32> [#uses=0] + %tmp18 = tail call i32 (i8*, ...)* @printf( i8* %s.0 ) ; <i32> [#uses=0] + %tmp20 = tail call i32 (i8*, ...)* @printf( i8* %s.0 ) ; <i32> [#uses=0] + %tmp22 = tail call i32 (i8*, ...)* @printf( i8* %s.0 ) ; <i32> [#uses=0] + %tmp24 = tail call i32 (i8*, ...)* @printf( i8* %s.0 ) ; <i32> [#uses=0] + %tmp26 = tail call i32 (i8*, ...)* @printf( i8* %s.0 ) ; <i32> [#uses=0] + %tmp28 = tail call i32 (i8*, ...)* @printf( i8* %s.0 ) ; <i32> [#uses=0] + %tmp30 = tail call i32 (i8*, ...)* @printf( i8* %s.0 ) ; <i32> [#uses=0] + %tmp32 = tail call i32 (i8*, ...)* @printf( i8* %s.0 ) ; <i32> [#uses=0] + ret void +} + +declare i32 @printf(i8*, ...) |