fix dropping non-primitive immediates

Closes #9446
make small tuples immediate

    fn foo() -> (int,) { (1,) }

Before:

    ; Function Attrs: nounwind uwtable
    define void @_ZN3foo18h1474c7c43a80309af4v0.0E({ i64 }* noalias nocapture sret, { i64, %tydesc*, i8*, i8*, i8 }* nocapture readnone) #0 {
    "function top level":
      %2 = getelementptr inbounds { i64 }* %0, i64 0, i32 0
      store i64 1, i64* %2, align 8
      ret void
    }

After:

    ; Function Attrs: nounwind readnone uwtable
    define { i64 } @_ZN3foo19h5396367929172193ac4v0.0E({ i64, %tydesc*, i8*, i8*, i8 }* nocapture readnone) #0 {
    "function top level":
      ret { i64 } { i64 1 }
    }